最近在研究數(shù)據(jù)挖掘相關(guān)的東西,在本地 Mac 環(huán)境搭建了一套偽分布式的 hadoop 開發(fā)環(huán)境蛇捌,采用CDH發(fā)行版本百姓,省時省心。
官網(wǎng)這篇文章有的地方格式不對尽纽,部分鏈接也失效,運(yùn)行時還會有一些問題球碉,所以這里重新記錄如下蜓斧。
安裝 JDK?
安裝完成后路徑應(yīng)該是?
/Library/Java/JavaVirtualMachines/jdk1.8.x_xx.jdk/Contents/Home?
其中 x_xx 應(yīng)該是你下載的對應(yīng)版本號。
在命令行中執(zhí)行?
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.x_xx.jdk/Contents/Home"
本地 SSH 登錄
打開 系統(tǒng)分享 設(shè)置
勾選 Remote Login 復(fù)選框睁冬。
打開命令行挎春,執(zhí)行以下命令:
ssh-keygen -t rsa -P ""
一路回車,直到結(jié)束豆拨。如果你有 ssh 登錄的經(jīng)驗直奋,這里可以用你自己的公鑰私鑰配置登錄。
最后執(zhí)行?
ssh localhost
如果沒有報錯施禾,則配置成功脚线。
下載 CDH Hadoop 壓縮包
查找下面四個文件并下載到本地
hadoop-2.6.0-cdh5.7.1.tar.gz? ?
hbase-1.2.0-cdh5.7.1.tar.gz? ?
hive-1.1.0-cdh5.7.1.tar.gz? ? ?
zookeeper-3.4.5-cdh5.7.1.tar.gz
建立 CDH 環(huán)境
打開命令行,執(zhí)行以下命令
mkdir -p ~/cloudera/lib ~/cloudera/cdh5.7 ~/cloudera/ops/dn ~/cloudera/ops/logs/hadoop ~/cloudera/ops/logs/hbase ~/cloudera/ops/logs/yarn ~/cloudera/nn ~/cloudera/pids ~/cloudera/tmp ~/cloudera/zk
將上一步下載的四個壓縮包拷貝到 ~/cloudera/lib 目錄弥搞,并打開命令行執(zhí)行以下命令
tar -xvf hadoop-2.6.0-cdh5.7.1.tar.gz
tar -xvf hbase-1.2.0-cdh5.7.1.tar.gz
tar -xvf hive-1.1.0-cdh5.7.1.tar.gz
tar -xvf zookeeper-3.4.5-cdh5.7.1.tar.gz
命令行中 cd ~/cloudera/cdh5.7 邮绿,并執(zhí)行以下命令
ln -s ~/cloudera/lib/hadoop-2.6.0-cdh5.7.1 hadoop
ln -s ~/cloudera/lib/hbase-1.2.0-cdh5.7.1 hbase?
ln -s ~/cloudera/lib/hive-1.1.0-cdh5.7.1 hive
ln -s ~/cloudera/lib/zookeeper-3.4.5-cdh5.7.1 zookeeper
最后你的 ~/cloudera 目錄結(jié)構(gòu)應(yīng)該如下
編輯配置文件
~/.profile
CDH="cdh5.1"
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.x_xx.jdk/Contents/Home"
export HADOOP_HOME="/Users/你的用戶名/cloudera/${CDH}/hadoop"
export HBASE_HOME="/Users/你的用戶名/cloudera/${CDH}/hbase"
export HIVE_HOME="/Users/你的用戶名/cloudera/${CDH}/hive"
export HCAT_HOME="/Users/你的用戶名/cloudera/${CDH}/hive/hcatalog"
export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${ZK_HOME}/bin:${HBASE_HOME}/bin:${HIVE_HOME}/bin:${HCAT_HOME}/bin:${PATH}
按照 github 上的文件內(nèi)容編輯下面一系列文件
$HADOOP_HOME/etc/hadoop/core-site.xml
$HADOOP_HOME/etc/hadoop/hdfs-site.xml
$HADOOP_HOME/etc/hadoop/yarn-site.xml
$HADOOP_HOME/etc/hadoop/mapred-site.xml
$HADOOP_HOME/etc/hadoop/hadoop-env.sh (indicated properties only)
$HBASE_HOME/conf/hbase-site.xml
開始運(yùn)行
命令行中執(zhí)行命令
hdfs namenode -format
編輯文件 $HADOOP_HOME/libexec/hadoop-config.sh,查找 # Attempt to set JAVA_HOME if it is not set 到這一行攀例,把下面的四行代碼中
if [ -x /usr/libexec/java_home ]; then
? ? ? ? export JAVA_HOME=($(/usr/libexec/java_home))
else
? ? ? ? export JAVA_HOME=(/Library/Java/Home)
fi
多余的兩對括號去除船逮,變成下面這樣
if [ -x /usr/libexec/java_home ]; then
? ? ? ? export JAVA_HOME=$(/usr/libexec/java_home)
else
? ? ? ? export JAVA_HOME=/Library/Java/Home
fi
這兩對括號會導(dǎo)致取值不正確,最后 yarn 中會只用硬編碼的 JAVA_HOME=/bin/ 來尋找 java 命令的位置粤铭,導(dǎo)致所有的任務(wù)都會執(zhí)行失敗挖胃。
啟動服務(wù)
sh $HADOOP_HOME/sbin/start-dfs.sh
sh $HADOOP_HOME/sbin/start-yarn.sh
sh $HBASE_HOME/bin/start-hbase.sh
停止服務(wù)
sh $HADOOP_HOME/sbin/stop-dfs.sh
sh $HADOOP_HOME/sbin/stop-yarn.sh
sh $HBASE_HOME/bin/stop-hbase.sh
服務(wù)管理地址
HDFS: http://localhost:50070/dfshealth.html
Yarn Scheduler: http://localhost:8088/cluster
Yarn NodeManager: http://localhost:8042/node
測試 MR 任務(wù)
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.1.jar pi 100 100