网络配置
-
hostname 查看珠玑名
-
vim /etc/sysconfig/network 设置主机名
-
ifconfig 查看ip情况
-
vim /etc/sysconfig/network-scripts/ifcfg-eth0 设置网络
-
DEVICE="eth0" 接口名(设备、网卡)
-
BOOTPROTO=STATIC IP的配置方法(static:固定IP,dhcp:,none:手动)
-
ONBOOT=yes 系统启动的时候网络端口是否有效
-
IPADDR=192.168.1.2 IP网址
-
GATEWAY=192.168.1.0 网关
-
service network restart 重启网卡服务
-
service network start 开始网卡服务
-
service network stop 停止网卡服务
-
ifconfig eth0 up|down 启用和关闭制定的网卡
-
ifconfig 查看配置的ip信息是否生效
-
vim /etc/hosts 设置珠玑和ip映射关系
-
192.168.1.2 master
-
192.168.1.3 slave1
-
192.168.1.4 slave2
-
ping master
-
service iptables stop 关闭防火墙
-
chkconfig iptables off 关闭自启动防火墙服务
配置SSH
-
rpm -qa | grep openssh 查看是否安装了ssh服务
-
rpm -qa | grep rsync 查看是否安装了rsync服务
-
yum install ssh 安装ssh协议
-
yum install rsync rsync是一个远程数据同步工具
-
service sshd restart 启动sshd服务
-
ssh-keygen -t rsa -p ' ' 生成无密码密钥对(存放路径是/home/Haddop/.ssh)
-
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys 将id_rsa.pub追加到授权的key中
-
chmod 600 ~/.ssh/authorized_keys 授予读写权限
-
vim /etc/ssh/sshd_config 修改sshd服务的配置文件
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
-
service sshd restart 重启sshd服务,是修改生效
-
ssh master 严验证ssh登录(第一次会要求输入密码)
单点对多点的SSH无密码登录
-
ssh-keygen
-
ssh-copy-id storm@slave1 格式是"ssh-copy-id 用户名@主机名"
-
ssh-copy-id storm@slave2 将本机名的公钥复制到远程机器的authorized_keys文件
安装JDK
-
root用户登录
-
mkdir /usr/java 创建/usr/java目录
-
cp /root/Downloads/jdk-6u31-linux-i584.bin /usr/java 复制
-
chmod +x jdk-6u31-linux-i584.bin 赋予执行的权限
-
./jdk-6u31-linux-i584.bin 执行解压过的bin文件
-
rm -rf jdk-6u31-linux-i584.bin 删除jdk安装文件
-
vim /etc/profile
在尾部添加以下内容:
# set java environment
export JAVA_HOME=/usr/java/jdk1.6.0_31/
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
source /etc/profile 使profile的配置文件生效
java -version 验证jdk是否安装成功
安装剩余机器:
-
scp /usr/java/jdk1.6.0_31/ Hadoop@mster$i:/usr/java;
使用shell脚本安装:
for i in $(seq 1 100);
do echo slave$i;
scp /usr/javajdk1.6.0_31/ Hadoop@slave$i:/usr/java;
done
profile环境变量的配置文件要可以配置好后一次发送到所有集群中
Hadoop集群的安装
-
以root用户登录
-
cp /root/Downloads/Hadoop-1.0.0.tar.gz /usr
-
cd /usr
-
tar -zxvf Hadoop-1.0.0.tar.gz 解压tar.gz的安装包
-
mv Hadoop-1.0.0.tar.gz hadoop 文件夹重命名
-
chown -R Hadoop:Hadoop Hadoop hadoop文件的属主重新分配,-R是递归,hadoop文件夹分配给hadoop组下的hadoop用户
-
rm -rf Hadoop-1.0.0.tar.gz 删除安装文件
配置Hadoop的环境变量
-
vim /etc/profile
-
export HADOOP_HOME=/usr/Hadoop
-
export PATH=$PATH:$HADOOP_HOME/bin
-
source /etc/profile 使配置生效
配置hadoop
-
配置hadoop-env.sh(文件位于/usr/Hadoop/bin/conf)
-
vim /usr/Hadoop/bin/conf/Hadoop-env.sh
-
export JAVA_HOME=/usr/java/jdk1.6.0_31
-
配置core-site.xml文件
-
mkdir /usr/Hadoop/tmp 创建文件夹tmp,用来保存hadoop临时数据
-
vim /usr/Hadoop/bin/conf/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
(备注:请先在 /usr/hadoop 目录下建立 tmp 文件夹,默认采用系统的临时目录:/tmp/Hadoop-hadoop。而这个目录每次重启都会被干掉,必须重新执行format才行,否则会出错。)
<description>A base for other temporary directories.</description>
</property>
<!–file system properties ,配置NameNode的访问地址–>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.2:9000</value>
</property>
</configuration>
-
配置hdfs-site.xml ,默认备份方式是3
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
(备注:replication 是数据副本数量,默认为3,salve少于3台就会报错)
</property>
<configuration>
-
配置mapred-site.xml
修改hadoop中mapreduce的配置文件,配置的jobTracker的地址和端口
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>http://192.168.1.2:9001</value>
</property>
</configuration>
-
配置mster
修改/usr/Hadoop/conf/masters文件,指定master机器的主机名
vim /usr/Hadoop/conf/masters
192.168.1.2(或者是master)
-
配置slave
vim /usr/Hadoop/conf/slaves
slave1
slave2
注意:单机启动的时候,conf/slaves中一定不能为空。没有其他机器,就指定自己。
集群环境下,slave机器上可以不配置slaves
-
在集群中的其他机器上重复此配置
建议普通用户在hadoop下通过scp复制到其他机器对应的目录下,其中第6步是master机器特有的
使用shell脚本:
for i in $(seq1 100);
do echo slave$i;
scp /usr/hadoop Hadoop@slave$i:/usr;
scp /etc/profile Hadoop@slave$i:/etc;
done
复制文件后可能会发现hadoop目录是root权限
chown -R hadoop:Hadoop Hadoop 授权给hadoop用户
Hadoop启动相关命令:
-
Hadoop namenode -format 在master机器上格式化namenode
只需要执行一次,如果要重新执行,一定要先删除配置文件core-site.xml中配置
的hadoop.tmp.dir对应路径下的文件
-
service iptables stop 关闭集群中所有机器防火墙
for i in (seq 1 100);
Do ssh node $i "hostname;
service iptables stop;
chkconfig iptables off;
service iptables status";
done
-
start-all.sh 启动hadoop的所有服务,包含(hdfs和mapreduce的相关服务)
可以通过以下启动日志看出,首先启动namenode,接着启动datanode1,datanode2,……,然后启动secondarynamenode。再启动jobtracker,然后启动tasktracker1,tasktracker2,………。
启动hadoop成功后,在master中的tmp文件夹中生成dfs文件夹,在slave中的tmp文件夹中均生成了dfs文件加和mapred文件夹
-
jps 查看进程
-
在master上的结果是
-
jobTracker
-
NameNode
-
jps
-
SecondaryNameNode
-
在slave上的结果是
-
TaskTracker
-
DataNode
-
jps
-
Hadoop dfsadmin -report 查看hadoop集群的状态
-
Hadoop dfsadmin -safemode leave 关闭hdfs的安全模式
http:192.168.1.2:50030 访问mapreduce对应网页
http:192.168.1.2:50070 访问hdfs的对应网页
服务器一直启动不了的终极解决办法:
-
删除集群中所有机器上的/usr/Hadoop/tmp文件
-
删除集群中所有机器上的pid文件。默认保存在/tmp目录下。授权给hadoop用户
-
重新执行stop-all.sh,把能关的服务先关掉
-
执行ps -ef|grep java|grep hadoop命令,查询是否还有hadoop相关进程在运行,如有则kill -9 进程号 命令杀掉
-
重新格式话珠玑master
-
执行start-all.sh启动hadoop
-
发现没有报错,执行Hadoop dfsadmin -report 命令查看hadoop运行状态,发现只启动了一个节点。可能还是存在安全模式
-
执行hadoop dfsadmin -safemode leave 关闭主机上的安全模式
-
再一次执行hadoop dfsadmin -report
解决“no datanode to stop ”问题
原因:
每次namenode format 会重新创建一个namenodeId,而/tmp/dfs/data下包含了上次 format下的id,namenode format 清空了namenode下的数据,但是没有清空datanode下的数据,到时启动是失败,所有每次format前,清空tmp下的所有目录
-
第一种方法:
删除master上的tmp文件夹 rm -fr /usr/Hadoop/tmp
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/196524.html