一、1. 搭建三个Ubuntu系统(master,node1,node2节点都要操作)1.修改主机名:gedit etchostname 改为masternode1node2
一、
1. 搭建三个Ubuntu系统
(master,node1,node2节点都要操作)
1.修改主机名:
gedit /etc/hostname 改为master/node1/node2
2.将普通用户改为root用户
执行sudo passwd root,执行后会提示你设置密码,请自行设置需要的密码,切记一定要记住设置的密码,如下图所示:
此步为额外步骤,可以不做(目的是使用root用户登录,方便之后的操作)输入以下命令cd /usr/share/lightdm/lightdm.conf.d/ 进入目录/usr/share/lightdm/lightdm.conf.d下,然后执行命令sudo gedit 50-unity-greeter.conf(注执行完该命令会弹出一个文本编辑窗口,见下图),对50-unity-greeter.conf文件进行编辑
在打开的文本编辑窗口中,添加以下信息,来设置登陆时可以选择的用户登录,如下图所示:
user-session=ubuntu
greeter-show-manual-login=true
all-guest=false
二、
1. 配置ip
(master,node1,node2节点都要操作)
gedit /etc/hosts 编辑为:
重启
三、
1. jdk,hadoop配置:
在home下创建一个文件夹hadoop:用于存放jdk,hadoop,hbase:
在hadoop目录下安装jdk:apt-get install jdk8
在hadoop下解压hadoop-2.7.3.tar.gz:tar -zxvf hadoop-2.7.3.tar.gz
对hadoop进行配置:
编辑hadoop-env.sh(修改JAVA_HOME的配置)
sudo gedit hadoop-env.sh
export JAVA_HOME=/home/hadoop/tools/jdk7
export HADOOP_PID_DIR=/home/hadoop/pids
编辑yarn-env.sh,在底部增加
export JAVA_HOME=/home/hadoop/tools/jdk7
export YARN_PID_DIR=/home/hadoop/pids
编辑slaves文件,在底部增加
master
slave1
slave2
编辑core-site.xml
fs.defaultFS
hdfs://master:9000
hadoop.tmp.dir
/home/hadoop/temp
编辑hdfs-site.xml
dfs.replication
该数值为slave节点数 -->
3
dfs.namenode.name.dir
file:/home/hadoop/dfs/name
true
dfs.datanode.data.dir
file:/home/hadoop/dfs/data
编辑yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.aux-services.mapreduce.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
yarn.resourcemanager.hostname
master
编辑mapred-site.xml
默认没有该文件
mapreduce.framework.name
yarn
true
配置用户环境变量
sudo gedit~/.bashrc
在末尾加上:
#Hadoop
exportHADOOP_PREFIX="/home/hadoop/tools/hadoop2.6"
exportPATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
exportHADOOP_COMMON_HOME=${HADOOP_PREFIX}
exportHADOOP_HDFS_HOME=${HADOOP_PREFIX}
exportHADOOP_MAPRED_HOME=${HADOOP_PREFIX}
exportHADOOP_YARN_HOME=${HADOOP_PREFIX}
#setjava environment
exportJAVA_HOME=/home/hadoop/tools/jdk7
exportJRE_HOME=/home/hadoop/tools/jdk7/jre
exportMAHOUT_HOME=/home/hadoop/tools/mahout-distribution-0.9
exportMAVEN_HOME=/home/hadoop/tools/maven3.2
exportPATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$MAHOUT_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
exportSCALA_HOME=/home/hadoop/tools/scala2.10
exportPATH=.:$PATH:$SCALA_HOME/bin
exportSPARK_HOME=/home/hadoop/tools/spark1.4
exportPATH=.:$PATH:$SPARK_HOME/bin:$SPARK_HOME:sbin
exportHBASE_HOME=/home/hadoop/tools/hbase1
exportPATH=.:$PATH:$HBASE_HOME/bin
使用source更新下.bashrc文件:source ~/.bashrc
hbase配置:(master)
在hadoop目录下解压
编辑hbase-env.sh,在底部增加
#The java implementation to use. Java1.7+ required.
exportJAVA_HOME=/home/hadoop/tools/jdk7
exportHBASE_MANAGES_ZK=true
export HBASE_PID_DIR=/home/hadoop/pids
编辑regionservers文件,在底部增加
master
slave1
slave2
编辑hbase-site.sh,在底部增加
hbase.rootdir
hdfs://master:9000/hbase
hbase.cluster.distributed
true
hbase.master
master:60010
hbase.zookeeper.quorum
master,node1,node2
zookeeper.znode.parent
/hbase
关闭防火墙
sudo ufw disable (关闭防火墙重启虚拟机生效)
安装SSH服务(建立无密码登陆本机和其他节点,各节点之间传送文件)
安装openssh-server;(node1,node2,master)
sudo apt-getinstall ssh
创建ssh-key,这里我们采用rsa方式;(node1,node2,master)
ssh-****** -trsa
(注:回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的)
(master)进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的;
cd ~/.ssh
cat id_rsa.pub>> authorized_keys
(node1,node2):将生成的 id_rsa.pub追加的master节点的authorized_keys下,命令如下:
scp ~/.ssh/ id_rsa.pub [email protected]:/home/a.txt将id_rsa.pub 的内容拷贝到a.txt中
cat /home/a.txt >> authorized_keys 再将a.txt的内容追加到 authorized_keys中
注:若scp权限不够,修改/etc/ssh/sshd_config 将PermitRootLogin ***改为PermitRootLogin yes
(master)scp~/.ssh/authorized_keys [email protected]:~/.ssh/
scp~/.ssh/authorized_keys [email protected]:~/.ssh/
3. 登录其他节点;
ssh node1
ssh node2
ssh master
master节点下使用ssh node1可进入node1
若不需要密码直接就可以进入,为成功
( 注:当ssh远程登录到其它机器后,现在你控制的是远程的机器,需要执行退出命令才能重新控制本地主机。退出命令;exit)
ssh 必须安装并且保证sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。
附ssh部分命令:
重启SSH
/etc/init.d/ssh restart
确认sshserver是否启动
ps -e | grep ssh
如果只有ssh-agent那ssh-server还没有启动,需要/etc/init.d/ssh start,如果看到sshd那说明ssh-server已经启动了。
1. 将hadoop传送给node1,node2节点:(在master上操作)
scp -r /home/hadoop [email protected]:/home/
scp -r /home/hadoop [email protected]:/home/
启动hadoop(master)
1. 1.第一次启动需要在master 执行format
2. bin/hdfs namenode -format
2.在master启动服务
sbin/start-all.sh
3.在master 验证启动进程:
4.在slave 验证启动进程:
5.打开浏览器输入:http:// master:8088 可查看相关的应用运行情况。
6. 打开浏览器输入:http:// master:50070 可查看hdfs目录
7.测试
bin/hdfs dfs -ls /
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir -p /user/micmiu/wordcount/in
创建三个文件(内容相同)
micmiu-01.txt:
micmiu-02.txt:
micmiu-03.txt:
上传三个文件
bin/hdfs dfs -put micmiu*.txt /user/micmiu/wordcount/in
启动wordcount
bin/hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jarwordcount /user/micmiu/wordcount/in /user/micmiu/wordcount/out
查看结果输出out文件
bin/hdfsdfs -
cat
/user/micmiu/wordcount/out/part-r-00000
启动hbase(master)
在浏览器中输入http://192.168.16.128:16030/rs-status,如图则配置成功:
1. 附录:遇到的部分问题总结
1. slave节点的DataNode自动关闭问题
原因:Namenode上namespaceID与datanode上namespaceID不一致。
每次namenodeformat会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,所以造成namenode节点上的namespaceID与datanode节点上的namespaceID不一致。启动失败。
解决方案:
(1)停掉集群服务
(2)在出问题的datanode节点上删除data目录,data目录即是在hdfs-site.xml文件中配置的dfs.data.dir目录,本机器上那个是/var/lib/hadoop-0.20/cache/hdfs/dfs/data/
(3)格式化namenode.
(4)重新启动集群。
2. NameNode结点不能启动
jps查看结点启动情况没有NameNode结点
一种原因是在core-site.xml中指定了如下配置:
hadoop.tmp.dir
/tmp/hadoop/hadoop-${user.name}
但是tmp会在启动的时候清空,而dfs的数据就会变得不一致,导致启动失败,可以重新更改位置:
hadoop.tmp.dir
/var/hadoop/hadoop-${user.name}
然后执行: hadoop namenode -format 命令(由于namenode数据存储目录变更,namenode需要重新格式化)
重启后即可。
3. 运行wordcount时权限不足
解决方案:
在配置hdfs-site.xml中增加配置代码:
dfs.permissions.enabled
false
4. 解除安全模式
解决方案:
hadoop dfsadmin -safemode leave
5.ssh免密不成功:
首先要修改主机 和ssh连接到的远程机 的配置文件:
vi /etc/ssh/sshd_config
(要确保这些字符前无注释符号“#”)
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
PeimitEmptyPasswords yes
然后查看各节点的authorized_keys是否包含三个节点的私钥信息,如果缺失,重新传送
6.环境配置文件添加错误,导致无法进入root,一些操作命令不能执行,解决办法
输入命令export PATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
之后gedit命令就可以使用了
将错的文件改回来就可以了
注:一个用户下对应着一个自己的环境配置文件,