命令汇总
网络配置:
hostname
查看主机名
vi /etc/sysconfig/network
设置主机名
ifconfig
查看ip情况
vi /etc/sysconfig/network-scripts/ifcfg-eth0
设置网络
DEVICE=
“eth0” 接口名(设备,网卡)
BOOTPROTO=STATIC IP
的配置方法(static:固定IP,dhcpHCP,none:手动)
ONBOOT=yes
系统启动的时候网络接口是否有效(yes/no)
IPADDR=192.168.1.2 IP
网址
GETEWAY=192.168.1.0
网关
DNS1=202.113.112.55 DNS
服务器
service network restart
重启网卡服务
service network start
开始网卡服务
service network stop
停止网卡服务
ifconfig eth0 up|down
关闭和启用指定的网卡
ifconfig
查看配置的ip信息是否生效
vi /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 rshnc
是一个远程数据同步工具
service sshd restart
启动sshd服务
ssh-keygen -t rsa -P ‘’
生成无密码密钥对(存放路径是
/home/Hadoop/.ssh
)
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
将id_rsa.pub追加
到授权的Key中
chmod 600 ~/.ssh/authorized_keys
授予读写的权限
vi /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
文件中
多点对多点的ssh无密码登录
操作起来比较复杂,建议使用脚本语言实现。
每个机器上生成自己的公钥和私钥,并把自己的公钥追加到
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
exportJAVA_HOME=/usr/java/jdk1.6.0_31/
exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
exportPATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
source /etc/profile
使profile的配置文件生效
java –version
验证jdk是否安装成功
安装剩余机器:
scp /usr/java/jdk1.6.0_31/ Hadoop@master:
/usr/java/
使用shell脚本安装:
for i in $(seq 1 100);
do echo slave$i;
scp /usr/java/jdk1.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 hadoop
文件夹重命名
chown -R Hadoop:Hadoop Hadoop hadoo
文件的属主重新分配,-R是递归,hadoop文件夹分配给hadoop组下的hadoop用户
rm –rf Hadoop-1.0.0.tar.gz
删除安装文件(-r是递归,-f是强制)
配置hadoop的环境变量
vi /etc/profile
export HADOOP_HOME=/usr/Hadoop
export PATH=$PATH:$HADOOP_HOME/bin
sourcr /etc/profile
使配置生效
配置hadoop
1.
配置hadoop-env.sh
文件位于“/usr/Hadoop/conf”
vi /usr/Hadoop/conf/Hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.6.0_31
2.
配置core-site.xml文件
mkdir /usr/Hadoop/tmp
创建文件夹tmp,用来保存hadoop临时数据
vi /usr/Hadoop/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>
3.
配置hdfs-site.xml文件
修改hadoop中的hdfs的配置,配置的备份方式默认是3
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
(备注:replication 是数据副本数量,默认为3,salve少于3台就会报错)
</property>
<configuration>
4.
配置mapred-site.xml文件
修改hadoop中mapreduce的配置文件,配置的jobTracker的地址和端口
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>http://192.168.1.2:9001</value>
</property>
</configuration>
5.
配置masters文件
修改/usr/Hadoop/conf/masters文件,指定master机器的主机名
vi /usr/Hadoop/conf/masters
192.168.1.2
(或者是master)
6.
配置slaves文件
vi /usr/Hadoop/conf/slaves
slave1
slave2
注意:单机启动的时候,conf/slaves中一定不能为空。没有其他机器,就指定自己。
集群环境下,slave机器上可以不配置slaves
7.
在集群中的其他机器上重复此配置
建议在普通用户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 iin (seq 1 100 );
Do ssh node$i “hostname;
service iptable 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的对应网页
服务一直启动不了的终极解决办法:
1.删除集群中所有机器上的/usr/Hadoop/tmp文件
2.删除集群中所有机器上的pid文件。默认存放在/tmp目录下。这里我重新设置到了/bigdata/hadoop/pids,记得要授权给hadoop用户
3.重新执行stop-all.sh,把能关的服务先都关掉。
4.执行ps -ef | grep java| grep hadoop命令,查询是否还有hadoop相关进程才运行,如果有,执行kill -9 进程号 命令杀掉
5.重新格式化主机master
Hadoopnamenode -format
6.执行start-all.sh启动hadoop
7.发现没有报错,执行 Hadoopdfsadmin –report 命令查看hadoop运行状态
出现如图所示:
发现只启动了一个节点。可能是还存在安全模式。
8.执行hadoop dfsadmin –safemodeleave,关闭主机上的安全模式
9.再次执行hadoop dfsadmin –report
解决“no datanode to stop”问题?
原因:
每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp一下的所有目录。
第一种方法:
删除master上的tmp文件夹
rm -rf /usr/Hadoop/tmp
创建/usr/Hadoop/tmp文件夹
mkdir /usr/Hadoop/tmp
删除“/tmp”一下的“hadoop”开头文件
rm -rf /tmp/Hadoop*
重新格式化hadoop的master
Hadoop namenode -format
启动hadoop
start-all.sh
使用第一种方案,有种不好处就是原来集群上的重要数据全没有了。假如说Hadoop集群已经运行了一段时间。建议采用第二种。
第二种方法:(推荐)
1)修改每个Slave的namespaceID使其与Master的namespaceID一致。
或者
2)修改Master的namespaceID使其与Slave的namespaceID一致。
该"namespaceID"位于"/usr/hadoop/tmp/dfs/data/current/VERSION"文件中,前面蓝色的可能根据实际情况变化,但后面红色是不变的。
建议采用第二种,这样方便快捷,而且还能防止误删。
解决Exceeded MAX_FAILED_UNIQUE_FETCHES问题
出现错误如下:
Shuffle Error: ExceededMAX_FAILED_UNIQUE_FETCHES; bailing-out
程序里面需要打开多个文件,进行分析,系统一般默认数量是1024,(用ulimit -a可以看到)对于正常使用是够了,但是对于程序来讲,就太少了。
执行ulimit -a 查看文件限制数量
vim /etc/security/limits.conf
添加:
soft nofile 102400
soft nofile 409600
vim /etc/pam.d/login
添加:
session required /lib/security/pam_limits.so