opiuytr1 发表于 2017-1-4 09:58:57

Hadoop学习--完全分布式部署(pdsh/include&exclude/安全模式/均衡...

                      Hadoop学习--完全分布式部署(pdsh/include&exclude/安全模式/均衡器/快照/回收站)--day02
                      
[*]安装准备工作
准备5台服务器,hadoop01部署namenode resourcemanager,hadoop02-hadoop03是datanode,hadoop04部署secondarynamenode

   上传hadoop-2.7.3.tar.gz/soft
   虚拟机Java安装完毕
      卸载原有的openjdk的版本
      # java -version如果看到有openjdk的字样就是说明是系统带的openjdk版本
      # rpm -qa|grep jdk
      用类似如下的方法删除上面的rpm包
         #rpm -e --nodeps   java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
      检查是否还有jdk1.5的版本,有就删除
      #rpm -e --nodeps java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64
      #解压新下载的jdk的安装包
      配置环境变量
2.解压hadoop
   $tar -xzvf hadoop-2.7.3.tar.gz
3.配置环境变量
   编辑/etc/profile,添加如下内容
   export JAVA_HOME=/soft/jdk1.8.0_111
   export HADOOP_HOME=/soft/hadoop-2.7.3
   export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
   并且把以上的内容写到/home/hadoop/.bashrc中
4.配置SSH免密码登陆
   $ssh-keygen -t rsa (四个回车)
   执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
   将公钥拷贝到要免登陆的机器上
   $cd /home/hadoop/.ssh
   $cat id_rsa.pub >> ~/.ssh/authorized_keys
   $chmod 600 authorized_keys

   mkdir ./ssh
   chmod 700 ~/.ssh cd ~/.ssh
   ssh-keygen -t rsa
   cd ~/.ssh
   cat /root/.ssh/id_rsa.pub > authorized_keys
   chmod 600 ~/.ssh/authorized_keys
   scp authorized_keys userB:/root/.ssh/
   注:A 为管理主机,B为被管理主机。
5.安装pdsh工具
#tar -jxvf pdsh-2.29.tar.bz2
#cd pdsh-2.29
#./configure --with-ssh --with-rsh --with-mrsh --with-mqshell \
--with-qshell--with-dshgroups --with-machines=/etc/pdsh/machines
#make
#make install
查看pdsh的版本号已经可使用的模块信息
$pdsh -v
查看pdsh显示当前所有加载的模块信息
$pdsh -L
命令查看user001,user002,user003主机上的时间,通过SSH
$pdsh -w ssh:user00 "date"
-g参数制定主机组,此参数用来指定一组远程主机,在编译pdsh时可以通过
“--with-dshgroups”参数来激活此选项,默认可以将一组主机列表写入一个
文件中并放到本地主机的~/.dsh/group或/etc/dsh/group目录下,这样就可
以通过“-g”参数调用了。
$pdsh -R ssh -g userhosts "date"
其中“userhosts”是一个主机列表文件,可以将此文件放在~/.dsh/group或
/etc/dsh/group目录下
$pdcp -R ssh -w vm -r ~/mpi~/
$pdcp -R ssh -g hostname -r ~/mpi~/
6.本地eclipse环境设置
(1).首先解压hadoop-2.7.3.tar.gz ,创建_libs/_source/_test-source/_test-libs这四个文件夹
(2).进入hadoop-2.7.3目录中,搜索jar包文件,先把搜索到的jar包文件全部复制到_libs文件夹下
(3).进入_libs文件夹下,搜索带source文件名的包,搜索到后剪切全部放入_source文件夹下
(4).从_sources文件夹中搜索test-source的jar包,搜索到后剪切全部放入_test-source文件夹下
(5).注意上述四个文件夹要放在同一级的目录下
(6).最后在_libs文件夹中搜索test的jar包,剪切后放入到新建的_test-libs包下
(7).打开eclipse,新建一个项目,配置buildpath目录
(8).添加外部的jar包,找到_libs文件夹中所有的jar包,添加
(9).对于的源码信息要关联时,点击Attach Source到_source文件夹中对应的包
7.注意配置文件的内容对于jar包的位置
(1).core-default.xml
      ...\_libs\hadoop-common-2.7.2.jar
(2).hdfs-default.xml
      ...\_libs\hadoop-hdfs.2.7.2.jar
(3).mapred-default.xml
      ...\_libs\hadoop-yarn-common-2.7.2.jar
(4).yarn-default.xml
      ...\_libs\hadoop-yarn-common-2.7.2.jar
(5).注意copy上面所有的内容到_conf文件夹中新建对于的同名的文件中
      以便查找配置项进行配置
8.配置辅助名称节点
   从_conf文件中查找.xml文件结尾的内容中secondary字样,找到配置辅助名称节点的内容项
   在_conf\hdfs-default.xml中,发现有dfs.namenode.secondary.http-address这个key字样
   修改hdfs-site.xml文件内容,增加如下内容
   <name>dfs.namenode.secondary.http-address</name>
   <value>hadoop05:50090</value>
   <description>
   The secondary namenode http server address and port.
   </description>   
9.配置hadoop临时目录的参数
   从_conf文件中查找.xml文件结尾的内容中local和hadoop.tmp.dir字样,找到配置项内容的位置
   在_conf\core-default.xml中,发现有<name>hadoop.tmp.dir</name>的字段
   修改core-site.xml,添加如下的内容(具体目录可以自己定义,这里暂时没有改变)
   <property>
   <name>hadoop.tmp.dir</name>
   <value>/tmp/hadoop-${user.name}</value>
   <description>A base for other temporary directories.</description>
   </property>
10.配置namenode的数据存放目录
   同理在_conf\hdfs-default.xml中找到dfs.namenode.name.dir
   修改hdfs-site.xml文件内容,增加如下内容
   <property>
   <name>dfs.namenode.name.dir</name>
   <value>file://${hadoop.tmp.dir}/dfs/name</value>
   <description>Determines where on the local filesystem the DFS name node
      should store the name table(fsimage).If this is a comma-delimited list
      of directories then the name table is replicated in all of the
      directories, for redundancy. </description>
   </property>
11.同理配置datanode的数据存放目录
   修改hdfs-site.xml文件内容,增加如下内容
   <property>
   <name>dfs.datanode.data.dir</name>
   <value>file://${hadoop.tmp.dir}/dfs/data</value>
   </property>
12.同理配置secondarynamenode的数据目录
   修改hdfs-site.xml文件内容,增加如下内容
   <property>
   <name>dfs.namenode.checkpoint.dir</name>
   <value>file://${hadoop.tmp.dir}/dfs/namesecondary</value>
   </property>   
13.修改默认块大小
   修改hdfs-site.xml文件内容,增加如下内容
   <property>
   <name>dfs.blocksize</name>
   <value>134217728</value>
   </property>
14.修改core-site.xml,添加如下信息
   <configuration>
   <property>
   <name>fs.defaultFS</name>
   <value>hdfs://hadoop01/</value>
   </property>
   </configuration>
15.修改hdfs-site.xml
   <property>
   <name>dfs.replication</name>
   <value>3</value>
   </property>
16.修改mapred-site.xml
   <property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
   </property>
17.修改yarn-site.xml
   <property>
   <name>yarn.resourcemanager.hostname</name>
   <value>hadoop01</value>
   </property>
   <!-- reducer获取数据的方式 -->
   <property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value>
   </property>
18.修改slaves
    hadoop02
    hadoop03
    hadoop04
19.命令手动启动namenode和datanode,其实hadoop-daemons.sh脚本是用到了hadoop-daemon.sh的脚本
   该命令只能在namenode的机器上执行
   $hadoop-daemon.sh start namenode//启动namenode进程
   $hadoop-daemon.sh stopnamenode//关闭namenode进程

   $hadoop-daemon.sh start datanode//在datanode节点上启动该节点上的datanode进程
   $hadoop-daemon.sh stop datanode
   $hadoop-daemons.sh start datanode//可以在任何namenode/datanode/secondarynamenode上执行
   $hadoop-daemons.sh stop datanode
   $hadoop-daemon.sh start secondarynamenode//只能在secondarynamenode上执行启动进程

   和该命令类似的有yarn-daemons.sh 和yarn-daemon.sh
20.查看节点信息位置
   $hdfs getconf -namenodes//查看集群中namenode是哪台机器
   $hdfs getconf -secondarynamenodes //查看集群中secondarynamenode是哪台机器

21.端口信息
   HDFS中配置的namenode
      rpc            //8020
      webui            //50070
   datanode
      rpc            //8032
      webui            //50075
   secondarynamenode   
      webui            //50090
   historyServer
      webui            //19888
   resourcemanager
      webui            //8088
   nodemanager
      webui            //8042
   linux系统中可用netstat -tuanlp这个命令来查看所有的内部端口、外部端口连接、
      TCP/UDP的所有信息
22.修改日志存放路径
   默认是在tar包目录下面的log文件夹
   修改tar包etc配置文件下的hadoop-env.sh文件夹
   添加:
      export HADOOP_LOG_DIR=/var/log/hadoop
   查看分析日志首先看的是.log文件, .out文件默认保留5个,会自动滚动覆盖
23.四大模块对于的配置文件
   (1).common
      hadoop-common-xxx.jar
      core-site.xml
      core-default.xml
   (2).hdfs
      hdfs-site.xml
      hdfs-default.xml
   (3).mapreduce
      mapred-site.xml
      mapred-default.xml
   (4).yarn      
      yarn-site.xml
      yarn-default.xml
24.Namenode和Datanode数据存放位置的说明
   (1).Namenode的数据存放位置配置
      在hdfs-default.xml中有如下参数可以修改,可以制定多个目录,这样就会在本机存在
      多个目录存放的一样的namenode的镜像文件数据,一定程度上保证了数据的安全性,并行写
      <property>
      <name>dfs.namenode.name.dir</name>
      <value>file://${hadoop.tmp.dir}/dfs/name</value>
      <description>Determines where on the local filesystem the DFS name node
      should store the name table(fsimage).If this is a comma-delimited list
      of directories then the name table is replicated in all of the
      directories, for redundancy. </description>
      </property>
      名称配置多个目录在于更可靠;
      每个目录存放的内容都是相同的.
   (2).Datanode的数据存放位置配置
       数据节点配置多个目录,不是副本;
       每个目录存放的内容不同,用","号分割
       在hdfs-default.xml中有如下参数可以修改
       <property>
       <name>dfs.datanode.data.dir</name>
       <value>file://${hadoop.tmp.dir}/dfs/data</value>
       <description>Determines where on the local filesystem an DFS data node
       should store its blocks.If this is a comma-delimited
       list of directories, then data will be stored in all named
       directories, typically on different devices. The directories should be tagged
       with corresponding storage types (///) for HDFS
       storage policies. The default storage type will be DISK if the directory does
       not have a storage type tagged explicitly. Directories that do not exist will
       be created if local filesystem permission allows.
       </description>
       </property>
   (3).secondarynamenode数据存放位置
      可以存放多个目录,存放的效果和存放namenode数据的多个目录都是一样的
      <property>
      <name>dfs.namenode.checkpoint.dir</name>
      <value>file://${hadoop.tmp.dir}/dfs/namesecondary</value>
      <description>Determines where on the local filesystem the DFS secondary
          name node should store the temporary images to merge.
          If this is a comma-delimited list of directories then the image is
          replicated in all of the directories for redundancy.
      </description>
      </property>
25.Commission|Decommission服役和退役节点的配置以及节点refreshNodes
   三个配置文件的关系:
       salves文件规定的主机是启动的时候允许启动相应的datanode进行,但是不能保证是否
       能够连接到namenode上。
       真正保证能够连接到namenode上的配置文件是在hdfs-defaults.xml中的dfs.hosts这个参数值决定的,
       这个值指向的是一个文件,文件中记录了哪些主机允许连接到namenode上,如果为空,所有的机器都是
       被允许的。
       在hdfs-defaults.xml中有个dfs.hosts.exclude参数,这个参数上配置的文件决定了排除哪些机器连接到
       namenode的,也就是不允许连接到namenode上面的机器列表。
       当include文件和exclude文件同时存在的时候:
       include   exclude    描述
       no      no         数据节点无法连接到名称节点
       no      yes      数据节点无法连接到名称节点
       yes       no         数据节点可以连接到名称节点
       yes       yes      数据节点可以连接到名称节点,但会退役

   测试:
   编辑配置文件
      
      dfs.hosts=/soft/hadoop/etc/dfs-hosts-include.conf
      dfs.hosts.exclude=/soft/hadoop/etc/dfs-hosts-exclude.conf
   分发hdfs-site.xml文件到所有的节点
   刷新节点,在namenode上面执行
      $hdfsdfsadmin-refreshNodes   
26.查看VERSION数据
   clusterID=xxx (namenode==datanode)
   storageID=xxx (datanode)
   cTime:集群创建时间
   acl:访问控制列表
   layoutVersion:是一个负整数,描述HDFS的永久性的数据结构(布局)版本
   namespaceID:是文件系统的唯一的标识符,是文件系统首次格式化时设置的,任何datanode在注册到namenode之前
               都不知道namepaceID值,因此namenode可以使用该属性鉴别新建的datanode
27.安全模式
   (1).namenode启动时,合并image和edit成新的image,并产生新的edit log
   (2).整个过程出于safe模式下,客户端只能读取
   (3).namenode安全模式操作
       $hdfs dfsadmin -safemode get //查看是什么状态
       $hdfs dfsadmin -safemode enter //进入
       $hdfs dfsadmin -safemode leave //离开
       $hdfs dfsadmin -safemode wait//等待
   (4).执行saveNamespace命令使得image文件和edit立即进行合并,生成新的image文件和edit日志,但是2nn还是老的
28.手动保存镜像文件
   $hdfs dfsadmin -fetchImage ~///保存镜像至当前home目录下
   可以在任何节点机器上执行,不要在安全模式下,相当于拷贝最新的image镜像,就是namenode上最新的image文件
29.手动保存元数据
   $hdfs dfsadmin -metasavexxx.meta
   可以在任何节点上面执行上面的命令,但是数据保存在namenode的log文件下
   默认存放在{HADOOP_HOME}/logs/
30.文件系统健康检查
   $hdfs fsck /
   查找HDFS某个文件的大小,块的信息,所在节点的信息
   $hdfs fsck /user/hadoop/xxxx.files   -files-blocks -racks
   webui查看数据节点上块的信息:http://hadoop02:50075/blockScannerReport
31.启动均衡器
   $start-balancer.sh
   启动均衡器,让集群在数据存储上更加平均,提高整个集群的性能
32.HDFS命令
   从本地上传文件并删除本地的文件
   $hadoop fs -moveFromLocalhello.txt /usr/ubuntu/data/   
   删除HDFS上面的文件
   $hadoop fs -rm -R /usr/ubuntu/data/had*
   查看hdfs上面文件的内容
   $hadoop fs -cat /user/ubuntu/data/had*
   查看目录的统计信息,统计目录数量/文件数/字节数
   $hadoop fs -count /x/x/x/
   追加HDFS上面的文件内容
   $hadoop fs -appendToFile name.txt /user/ubuntu/data/hello.txt
33.快照
   首先开启快照
   $hdfs dfsadmin -allowSnapshot /user/ubuntu/data
   针对目录进行snapshot,存放的快照文件在做快照目录下面的.隐藏文件
   $hadoop fs -createSnapshot /user/ubuntu/data snapshot-1
   关闭快照属性
   $hdfs dfsadmin -disallowSnapshot /usr/ubuntu/data
34.回收站
(1).默认是0秒,意味着禁用回收站
(2).设置文件在回收站的驻留时间
   
    fs.trash.interval=1//分钟数计算
(3).通过shell命令删除的文件,会进入trash
(4).每个用户都有自己的回收站(目录)
    $/usr/ubuntu/.Trash
(5).编程方式删除不进入回收站,立即删除,可以调用
   moveToTrash()方法,返回false,说明禁用回收站或者已经在站中
(6).恢复文件
   将.Trash目录的文件移动出来即可
   hadoop fs -mv /user/ubuntu/.Trash/xx/xx/xxdata/
(7).清空回收站
   hadoop fs -expunge
(8).测试删除回收站
   hadoop fs -rm -R /user/ubuntu/.Trash
35.目录配合和磁盘空间配额
   $hdfs dfsadmin -setQuota 2 /user/ubuntu/data/day   //指该目录下可以存在的文件数或目录的数量
   $hdfs dfsadmin -setSpaceQuota 20 /user/ubuntu/data/day//配置目录的磁盘空间配额为20字节



                   


页: [1]
查看完整版本: Hadoop学习--完全分布式部署(pdsh/include&exclude/安全模式/均衡...