join: Map端join //大表+小表,只須要map Reduce端join //大表+大表,須要Map和Reduce //設計組合key和flag //分組對比器 Json: fastJson技術 JSON.parseObject(str) //將string轉成jsonObject jo.get(key) //獲得json串指定的key所對應的value,String形式 jo.getJsonArray //獲得json串指定的key所對應的value,數組形式 在MR1代和MR2代資源調度區別: 1、一代中節點名稱稱爲jobTracker(主節點)和taskTracker 二代中節點名稱稱爲ResourceManager(主節點)和NodeManager 2、jobTracker充當全部資源分配和調度,和節點分配 ResourceManager只負責分配資源,而後在從節點啓動MRAppMaster進程,由AppMaster負責全部做業的執行和監控 如何進行遠程調試: 緣由:在本地客戶端沒法直接向集羣提交MR做業 遠程調試: 1、服務端:Linux(監聽) java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=192.168.23.101:8888 -cp myhadoop-1.0-SNAPSHOT.jar Helloworld 2、客戶端:IDEA(鏈接) 在類名下,Edit Configuration ==> + Remote, 修改Port和host,而後能夠進行debug 遠程調試hadoop程序: 修改${HADOOP_HOME}\etc\hadoop\hadoop-env.sh文件 添加以下行: export HADOOP_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=192.168.23.101:8888" 從ResourceMgrDelegate提交到YarnClientImpl Rpc和Ipc的調用: RPC:遠程過程調用,在hadoop的RPC中使用的是串行化技術 IPC:進程間通訊,也是使用串行化技術 HA:高可用: 使用兩個namenode,避免出現問題 1、高可用的問題: 兩個namenode同時運行,會發生腦裂 一個節點處於active狀態 另外一個節點處於standby狀態 //待命狀態 2、數據同步問題: JournalNode:在兩個namenode之間負責數據的同步,通常配置在datanode上 高可用配置: ===================================== hdfs-site.xml -------------------------------------------------------- <!-- 名字空間的邏輯名稱 --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- 指向兩個namenode --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <!-- 配置namenode的rpc地址 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>s101:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>s105:8020</value> </property> <!-- 配置namenode的HTTP端口 --> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>s101:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>s105:50070</value> </property> <!-- 配置journalnode地址,配置在datanode地址--> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://s102:8485;s103:8485;s104:8485/mycluster</value> </property> <!-- 配置容災代理,默認便可 --> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置防禦手段,使用shell(/bin/true) --> <property> <name>dfs.ha.fencing.methods</name> <value>shell(/bin/true)</value> </property> core-site.xml --------------------------------------- <!-- 使用邏輯名稱來肯定文件系統 --> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!-- journalnode工做目錄地址 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/centos/hadoop/full/journal</value> </property> 1、配置完成以後分發文件: 2、配置s105的ssh免密登錄:直接拷貝s101上的私鑰也能夠 ssh-copy-id centos@s101 ssh-copy-id centos@s102 ssh-copy-id centos@s103 ssh-copy-id centos@s104 ssh-copy-id centos@s105 3、將namenode中的工做目錄所有分發到s105 rsync -lr ~/hadoop centos@s105:~ 4、啓動journalnode:s101 hadoop-daemons.sh start journalnode 五、hdfs namenode -initializeSharedEdits 六、啓動進程:start-dfs.sh 7、將namenode變爲active狀態 hdfs haadmin -transitionToActive nn1 聚類: 將看似無關的集合,變成一個個有相關性的簇 舉例:將星星的集合當作星團的過程叫做聚類 聚類算法多用於推薦或將數據分組 聚類的作法:k-means聚類 計算數據間的距離:歐式距離 1、讀取中心點 2、將中心點和map中的全部行進行比較,並計算出距離 輸出組(簇)號和組(簇)數據 3、在reduce端對數據進行從新聚合並更新中心點 4、每次迭代MR,直到中心數據再也不變化,判斷MR做業什麼時候到達末尾 距離: 一、歐式距離 //歐幾里得距離a(1,0) b(1,2) √(x1-x2)^2 + (y1-y2)^2 √ 二、曼哈頓距離 //|x1-x2| + |y1-y2| 三、切比雪夫距離 //min{(x1-x2),(y1-y2)} 應用在機率場景 當物理維度超過三維,歐式距離就失去了意義,只能做爲距離的一個衡量標準