搭建hadoop分布式集群
~jdk安装ip修改 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0BOOTPROTO=noneHWADDR=00:0C:29:3B:FE:E6ONBOOT=yesNETMASK=255.255.255.0IPADDR=192.168.129.103TYPE=Ethernet USERCTL=noIPV6INIT=noPEERDNS=yesGATEWAY=192.168.129.254service network restartneat或者netconfig 在图形界面修改hostname修改 hostname hadoopvi /etc/sysconfig/network 修改HOSTNAME=hadoopvi /etc/hosts 删除127.0.0.1和localhost,增加所有集群机器的ip和主机名reboot重启机器增加hadoop用户 useradd -d /home/hadoop -s /bin/bash -m hadoop useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是终极用户-d:指定用户登入时的启始目录-m:自动建立用户的登入目录-s:指定用户登入后所使用的shellpasswd hadoop给hadoop用户添加权限 vi /etc/sudoers文件: 在root ALL=(ALL) ALL 下面添加hadoop ALL=(ALL) ALL相关命令 查看所有用户和组
cat /etc/group
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
userdel可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不删除相关文件。 userdel -r hadoopSHH免密码登录 + -SSH免密码登录
如果我们希望master 结点不需要密码就能使用ssh连接到slave结点,我们需要将master结点上的~/.ssh/id_dsa.pub的内容,添加到slave结点的~/.ssh/authorized_keys这个文件中。
因为Hadoop需要通过SSH登录到各个节点进行操作
master生成公私钥,将公钥发给slave机器,slave保存公钥到authorized_keys
SSH无密码原理 Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave上。
A机器ssh登录B机器无需输入密码; 加密方式选rsa|dsa均可以,默认dsa 做法:1、登录A机器 2、ssh-keygen -t [rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub 3、将 .pub 文件复制到B机器的 .ssh 目录,并cat id_dsa.pub >> ~/.ssh/authorized_keys 4、大功告成,从A机器登录B机器的目标账户,不再需要密码了;
(1)CentOS默认没有启动ssh无密登录,去掉/etc/ssh/sshd_config其中2行的注释,每台服务器都要设置, vi /etc/ssh/sshd_config #RSAAuthentication yes #PubkeyAuthentication yes
(2)ssh-keygen -t rsa,生成key,都不输入密码,一直回车,~就会生成.ssh文件夹,每台服务器都要设置,
(3)合并登录方的公钥到authorized_keys文件,
在Master服务器,进入~/.ssh目录,通过SSH命令合并, cat id_rsa.pub>> authorized_keysssh hadoop@192.168.0.183 cat ~/.ssh/id_rsa.pub>> authorized_keysssh hadoop@192.168.0.184 cat ~/.ssh/id_rsa.pub>> authorized_keys
(4)把Master服务器的authorized_keys、known_hosts复制到Slave服务器的/root/.ssh目录
(5)完成,ssh hadoop@192.168.0.183、ssh hadoop@192.168.0.184就不需要输入密码了
注意问题
authorized_keys的权限必须为644.ssh必须为711 chmod 711 ~/.ssh过高的权限不能通过ssh-add命令,过低的权限无法实现免密码登录。master 执行ssh-keygen -t rsa ssh-add id_rsassh-agent bashssh-add id_rsascp ~/.ssh/id_rsa.pub hadoop@slave1.hadoop:~/id_rsa_master.pub 拷贝公钥到要登录的机器要登录的slave cd ~ssh-keygen -t rsa 一直回车cat id_rsa_master.pub >> .ssh/authorized_keys是否成功 master ssh hadoop@slave1.hadoop如果不需要密码则成功检查问题 文件的权限 chmod 711 ~/.sshchmod 644 ~/.ssh/authorized_keys未开启无密码登录 去掉/etc/ssh/sshd_config其中2行的注释,双方服务器都要设置vi /etc/ssh/sshd_config #RSAAuthentication yes#PubkeyAuthentication yeshadoop包解压 tar –zxvf hadoop-2.6.0.tar.gzmv hadoop-2.6.0 hadoopchown –R hadoop:hadoop hadoop设置环境变量 vi /etc/profile## -------------------JAVA------------------------##JAVA_HOME=/usr/java/jdk1.6.0_45CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin## -------------------HADOOP PATH------------------------##export HADOOP_HOME=/usr/hadoopexport PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin修改配置 配置成功后,将hadhoop复制到各个从服务器上scp -r /home/myhadoop/hadoop-2.7.1 myhadoop@slave1.hadoop:/home/myhadoop/hadoop-env.sh 增加JAVA_HOME变量export JAVA_HOME=/usr/java/jdk1.7.0_79core-site.xml 配置HDFS的ip和端口号fs.defaultFS hdfs://master.hadoop:9000hadoop.tmp.dir file:/home/myhadoop/hadoop-2.7.1/tmpio.file.bffer.size 131702hdfs-site.xml dfs.namenode.name.dirdfs.datanode.data.diryarn-site.xml yarn.nodemanager.aux-services mapreduce_shuffleyarn.resourcemanager.hostname master.hadoopyarn.resourcemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandlermapred-site.xml mapreduce.framework.name yarn主服务器上执行bin/hdfs namenode -format 只能执行一次,多次执行需要修改所有节点的集群id与namenode中的一致,或者清空name和data目录sbin目录下执行 ./start-all.sh
sbin/hadoop-daemon.sh --config /home/myhadoop/hadoop-2.7.1/etc/hadoop --script hdfs start namenode
sbin/hadoop-daemons.sh --config /home/myhadoop/hadoop-2.7.1/etc/hadoop --script hdfs start datanode
sbin/start-dfs.sh
yarn-daemons.sh --config /home/myhadoop/hadoop-2.7.1/etc/hadoop start nodemanager
yarn-daemon.sh --config /home/myhadoop/hadoop-2.7.1/etc/hadoop start proxyserver
sbin/start-yarn.sh sbin/mr-jobhistory-daemon.sh --config /home/myhadoop/hadoop-2.7.1/etc/hadoop start historyserver
sbin/mr-jobhistory-daemon.sh --config /home/myhadoop/hadoop-2.7.1/etc/hadoop stop historyserver
测试
向hadoop集群系统提交一个mapreduce任务
bin/hdfs dfs -mkdir /tmp 在虚拟分布式文件系统上创建一个测试目录
tmp bin/hdfs dfs -copyFromLocal ./LICENSE.txt /tmp 将当前目录下的LICENSE文件复制到虚拟分布式文件系统中
bin/hdfs dfs -ls /tmp 查看文件系统中是否存在我们所复制的文件
运行如下命令向hadoop提交单词统计任务 bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /tmp/LICENSE.txt /tmp-output
查看输出结果 bin/hdfs dfs -cat /tmp/*