命令汇总


网络配置:


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.配置


   文件位于“/usr/Hadoop/conf”


 vi    /usr/Hadoop/conf/


       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></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




             启动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.重新执行,把能关的服务先都关掉。


4.执行ps -ef | grep java| grep hadoop命令,查询是否还有hadoop相关进程才运行,如果有,执行kill -9  进程号    命令杀掉


5.重新格式化主机master


Hadoopnamenode  -format


6.执行启动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


 



使用第一种方案,有种不好处就是原来集群上的重要数据全没有了。假如说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