大纲: 实验环境讲解 演示搭建HBase步骤并讲解 一 实验环境讲解 架构 namenode1(master1) namenode2(master2) datanode(regionserver) 使用NameNode1、NameNode2和DataNode1 三个服务器来模拟集群,NameNode1上搭建Hbase和Hmaster,NameNode2搭建Hmaster,与NameNode1互为主备,DataNode1上搭建regionserver,Hbase通过zookeeper来保存活跃的master节点信息,保证活跃的master节点出现问题时,备用master取代主master。 主机名 IP 安装软件 JPS启动进程 hadoop-namenode1 192.168.152.153 JDK/Zookeeper/Hadoop/HBase namenode/zkfc/journalnode/resourcemanager/QuoqumPeerMain/Hmaster hadoop-namenode2 192.168.152.155 JDK/Zookeeper/Hadoop/HBase namenode/zkfc/journalnode/resourcemanager/QuoqumPeerMain/Hmaster hadoop-datanode1 192.168.152.154 JDK/Zookeeper/Hadoop/HBase datanode/journalnode/nodemanager/QuoqumPeerMain/Hregionserver 二 演示搭建HBase步骤并讲解 2.1 准备阶段 2.1.1 查看、修改Linux系统的最大文件打开数和最大进程数 ulimit –a //测试环境一般不用修改,但是商业应用时一般需要修改 su vim /etc/security/limits.conf root soft nproc 50000 root hard nproc 50000 root soft nofile 25535 root hard nofile 25535 hadoop soft nproc 50000 hadoop hard nproc 50000 hadoop soft nofile 25535 hadoop hard nofile 25535 2.1.2 调整Linux内核参数 vim /etc/sysctl.conf net.ipv4.ip_forward= 0 net.ipv4.conf.default.rp_filter= 1 net.ipv4.conf.default.accept_source_route= 0 kernel.core_users_pid= 1 net.ipv4.tcp_syncookies= 1 net.bridge.bridge-nf-call-ip6tables= 0 net.bridge.bridge-nf-call-iptables= 0 net.bridge.bridge-nf-call-arptables= 0 kernel.mggmnb= 65536 kernel.mggmax= 65536 kernel.shmmax= 68719476736 kernel.shmall= 268435456 net.ipv4.tcp_max_syn_backlog= 65000 net.core.netdev_max_backlog= 32768 net.core.somaxconn= 32768 fs.file-max= 65000 net.core.wmem_default= 8388608 net.core.rmem_default= 8388608 net.core.rmem_max= 16777216 net.core.wmem_max= 16777216 net.ipv4.tcp_timestamps= 1 net.ipv4.tcp_synack_retries= 2 net.ipv4.tcp_syn_retries= 2 net.ipv4.tcp_mem= 94500000 915000000 927000000 net.ipv4.tcp_max_orphans= 3276800 net.ipv4.tcp_tw_reuse= 1 net.ipv4.tcp_tw_recycle= 1 net.ipv4.tcp_keepalive_time= 1200 net.ipv4.tcp_syncookies= 1 net.ipv4.tcp_fin_timeout= 10 net.ipv4.tcp_keepalive_intvl= 15 net.ipv4.tcp_keepalive_probes= 3 net.ipv4.ip_local_port_range= 1024 65535 net.ipv4.conf.eml.send_redirects= 0 net.ipv4.conf.lo.send_redirects= 0 net.ipv4.conf.default.send_redirects= 0 net.ipv4.conf.all.send_redirects= 0 net.ipv4.icmp_echo_ignore_broadcasts= 1 net.ipv4.conf.eml.accept_source_route= 0 net.ipv4.conf.lo.accept_source_route= 0 net.ipv4.conf.default.accept_source_route= 0 net.ipv4.conf.all.accept_source_route= 0 net.ipv4.icmp_ignore_bogus_error_responses= 1 kernel.core_pattern= /tmp/core vm.overcommit_memory= 1 保存修改后sysctl -p。 2.1.3 配置时间同步 如果集群节点时间不同步,可能会出现节点宕机或其它异常,生产环境中一般通过配置NTP服务器实现集群时间同步,需要确保各节点的时间差在10s以内,有条件最好隔一段时间同步一次。本集群在节点hadoop-namenode1中设置ntp服务器,具体方法如下: 切换至root用户 su root 查看、安装ntp pm -qa | grep ntp yum install -y ntp 配置时间服务器 vim /etc/ntp.conf 禁止所有机器连接ntp服务器 restrict default ignore 允许局域网内的所有机器连接ntp服务器 restrict 192.168.152.0 mask 255.255.255.0 nomodify notrap 使用本机作为时间服务器 server 127.127.1.0 启动ntp服务器 service ntpd start 设置ntp服务器开机自动启动 chkconfig ntpd on 集群其它节点通过执行crontab定时任务,每天在指定时间向ntp服务器进行时间同步,方法如下: 切换root用户 su root 执行定时任务,每天00:00向服务器同步时间,并写入日志 crontab -e 0 0 * * * /usr/sbin/ntpdate hadoop-namenode1>> /home/hadoop/ntpd.log // 查看任务 crontab -l 2.2 Hbase的安装、配置 2.2.1 下载、安装Hbase 此处版本为: hbase-1.2.2-bin.tar.gz 解压安装Hbase: tar zxvf hbase-1.2.2-bin.tar.gz 删除安装文件: rm hbase-1.2.2-bin.tar.gz 2.2.2 配置环境 cd /home/hadoop/apache/hbase-1.2.2/conf vim hbase-env.sh export JAVA_HOME=/home/hadoop/apache/jdk1.8.0_101 //设置jdk的路径 export HBASE_HEAPSIZE=1024 //设置hbase的堆(内存)的大小 export HBASE_MASTER_OPTS=”-Xmx512m” //设置hmaster的内存,企业级一般为4-8G export HBASE_REGIONSERVER_OPTS=”-Xmx1024m” //设置regionserver的大小 export HBASE_LOG_DIR=${HBASE_HOME}/logs //设置hbase日志路径 export HBASE_PID_DIR=/home/hadoop/apache/hbase-1.2.2/pids export HBASE_MANAGES_ZK=false //选用独立的zookeeper集群 vim hbase-site.xml <!-- 关闭分布式日志切割,如果采用true会采用regionserver去对日志进行切割,但会产生大量的IO内存的消耗,建议填写false --> <property> <name>hbase.master.distributed.log.splitting</name> <value>false</value> </property> <!-- 设置hdfs的根路径,HRegionServers共享目录 --> <property> <name>hbase.rootdir</name> <value>hdfs://mycluster/hbase</value> </property> <!-- 开启分布式模式,false为单机模式 --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 设置HMaster的rpc端口 --> <property> <name>hbase.master.port</name> <value>60000</value> </property> <!-- 指定ZooKeeper集群位置列表 --> <property> <name>hbase.zookeeper.quorum</name> <value>hadoop-namenode1,hadoop-namenode2,hadoop-datanode1</value> </property> <!-- 指定Zookeeper数据目录,需要与ZooKeeper集群上配置相一致 --> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/hadoop/apache/zookeeper-3.4.8/data</value> </property> <!-- hbase客户端rpc扫描一次调用的行数,提高扫描速度,但是会占用一定内存 --> <property> <name>hbase.client.scanner.caching</name> <value>2000</value> </property> <!-- HRegion分裂前最大的文件大小(默认10G) --> <property> <name>hbase.hregion.max.filesize</name> <value>10737418240</value> </property> <!-- 某个HRegionServer中最大的region数量,一般设置在2000左右 --> <property> <name>hbase.regionserver.reginoSplitLimit</name> <value>2000</value> </property> <!-- StoreFile的开始合并的数量,即个数超过这个数就开始合并,值越大合并的时间越长,默认值为3 --> <property> <name>hbase.hstore.compactionThreshold</name> <value>6</value> </property> <!-- 当一个region的storefile个数多于这个值的的时候,它会执行一个合并操作(block写入,等待compact),且会阻塞更新操作。默认为7,一般可以设置为15-20左右,设置太小会影响系统的吞吐率 --> <property> <name>hbase.hstore.blockingStoreFiles</name> <value>14</value> </property> <!-- 超过memstore大小的倍数达到该值则block所有写入请求,阻塞更新操作,进行自我保护 --> <property> <name>hbase.hregion.memstore.block.multiplier</name> <value>20</value> </property> <!-- server端后排线程的sleep间隔,默认为10000,单位:ms --> <property> <name>hbase.server.thread.wakefrequency</name> <value>500</value> </property> <!-- ZooKeeper客户端同时访问的最大并发连接数,zookeeper也要设置,都设置了才能发挥作用,建议设大一点,2000左右,比较重要 --> <property> <name>hbase.zookeeper.property.maxClientCnxns</name> <value>2000</value> </property> <!-- 设置一个regionserver里面menstore占总堆的百分比,达到设定的值以后,会让大的menstore刷写到磁盘,后两个值相加要小于0.8,否则会出现out of memory,根据业务情况进行配置 --> <property> <name>hbase.regionserver.global.memstore.lowerLimit</name> <value>0.3</value> </property> <property> <name>hbase.regionserver.global.memstore.upperLimit</name> <value>0.39</value> </property> <property> <name>hbase.block.cache.size</name> <value>0.4</value> </property> <!-- RegionServer的RPC请求处理IO线程数 --> <property> <name>hbase.reginoserver.handler.count</name> <value>300</value> </property> <!-- 客户端最大重试次数,默认为10 --> <property> <name>hbase.client.retries.number</name> <value>5</value> </property> <!-- 客户端重试前的休眠时间,单位:ms --> <property> <name>hbase.client.pause</name> <value>100</value> </property> <!-- 指定ZooKeeper集群端口 --> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> vim regionservers //添加regionserver节点主机名 hadoop-datanode1 复制hdfs-site.xml到conf目录下 cp /home/hadoop/apache/hadoop-2.6.0/etc/hadoop/hdfs-site.xml . vim backup-masters //添加备用Hmaster节点主机名 hadoop-namenode2 创建hbase的缓存文件目录、日志文件目录和pid文件目录 cd /home/hadoop/apache/hbase-1.2.2/ mkdir tmp mkdir logs mkdir pids 2.2.3 同步hbase工作目录到集群其它节点 scp -r /home/hadoop/apache/hbase-1.2.2 hadoop@hadoop-namenode2:/home/hadoop/apache/ scp -r /home/hadoop/apache/hbase-1.2.2 hadoop@hadoop-datanode1:/home/hadoop/apache/ 2.2.4 在各节点上修改用户环境变量并使其生效,且授予权限 chown -R hadoop:hadoop hbase-1.2.2 vim ~/.bash_profile export HBASE_HOME=/home/hadoop/apache/hbase-1.2.2 export PATH=$PATH:$HBASE_HOME/bin source ~/.bash_profile 2.3 启动集群 2.3.1 在各节点上开启zookeeper集群 zkServer.sh start 2.3.2 在hadoop-namenode1上启动hdfs start-dfs.sh 2.3.3 在hadoop-namenode2上启动yarn start-yarn.sh 2.3.4 在hadoop-namenode1上启动ResourceManager yarn-daemon.sh start resourcemanager 2.3.5 在hadoop-namenode1上启动hbase start-hbase.sh 启动后各节点进程如下 hadoop-namenode1: hadoop-namenode2: hadoop-datanode1: 2.4 功能测试 2.4.1 Web UI http://hadoop-namenode1:16010,可看到主Master状态 http://hadoop-namenode2:16010,可看到备份Master状态 2.4.2 Shell操作 进入Shell hbase shell 创建表employee,列族data > create 'employee','data' 往表employee中插入测试数据 > put 'employee','rowkey01','data:id','1001' > put 'employee','rowkey01','data:name','Henry' > put 'employee','rowkey01','data:address','Bangalore' > put 'employee','rowkey02','data:id','1002' > put 'employee','rowkey02','data:name','Messi' 检索表employee中的所有数据 > scan 'employee' 检索表employee中行键为rowkey01的数据 > get 'employee','rowkey01' 禁用表employee并删除它 > disable 'employee' > drop 'employee' 2.5 HDFS、HBase动态替换节点 2.5.1 Hadoop、HBase动态增加节点 2.5.1.1 增加Hadoop节点 新节点的IP配置,用户创建,核对时间,修改最大文件读取数、最大用户进程数和内核参数,SSH免密码登录配置等 配置hosts文件,添加主机名和IP地址,且同步到其它节点 修改hadoop的配置文件slaves,添加新节点的主机名 复制JDK和hadoop目录到新的节点(注意新节点的hadoop的data、pids等目录需要清除数据) 新节点hadoop权限的修改 修改新节点的环境变量 在新节点中通过命令Hdfs dfsadmin –setBalancerBandwidth设置字节数、带宽,通过命令start-balancer.sh -threshold 5均衡当前的HDFS块 (threshold是平衡阈值,默认是10%,值越小负载越均衡,但需要更长的时间去执行) 在新节点通过命令hadoop-daemon.sh start datanode和yarn-daemon.sh start nodemanager启动datanode和nodemanager进程 2.5.1.2 增加HBase节点 在HBase的配置文件regionserver中添加新节点的主机名 复制hbase目录到新的节点(注意新节点的data等目录也需要清除数据) 在新节点通过命令hbase-daemon.sh start regionserver启动HRegionServer 在新节点上通过hbase-daemon.sh start regionserver启动regionserver 进入hbase shell,通过命令balance_switch true进行region负载平衡 2.5.2 Hadoop、HBase动态删除节点 2.5.2.1 删除HBase节点 通过‘graceful_stop.sh 节点名’使得需要删除的节点的负载均衡停止使用 在HBase的配置文件regionserver中移除删除节点的主机名 2.5.2.2 删除Hadoop节点 在hadoop的配置文件hdfs-site.xml中添加配置: <property> <name>dfs.hosts.exclude</name> <value>/home/hadoop/apache/hadoop-2.6.0/etc/hadoop/exclude</value> </property> 在配置文件exclude中添加需要删除的节点主机名 通过命令hdfsafsadmin -refreshNodes执行节点刷新操作,重新加载配置 通过命令hadoop dfsadmin –report查看集群状态 Loading... 大纲: 实验环境讲解 演示搭建HBase步骤并讲解<!--more--> <h2>一 实验环境讲解</h2> <h3>架构</h3> namenode1(master1) namenode2(master2) datanode(regionserver) 使用NameNode1、NameNode2和DataNode1 三个服务器来模拟集群,NameNode1上搭建Hbase和Hmaster,NameNode2搭建Hmaster,与NameNode1互为主备,DataNode1上搭建regionserver,Hbase通过zookeeper来保存活跃的master节点信息,保证活跃的master节点出现问题时,备用master取代主master。 <table style="height: 148px;" width="658"> <tbody> <tr> <td style="text-align: center;">主机名</td> <td style="text-align: center;">IP</td> <td style="text-align: center;">安装软件</td> <td style="text-align: center;">JPS启动进程</td> </tr> <tr> <td style="text-align: center;">hadoop-namenode1</td> <td style="text-align: center;">192.168.152.153</td> <td style="text-align: center;">JDK/Zookeeper/Hadoop/HBase</td> <td style="text-align: center;">namenode/zkfc/journalnode/resourcemanager/QuoqumPeerMain/Hmaster</td> </tr> <tr> <td style="text-align: center;">hadoop-namenode2</td> <td style="text-align: center;">192.168.152.155</td> <td style="text-align: center;">JDK/Zookeeper/Hadoop/HBase</td> <td style="text-align: center;">namenode/zkfc/journalnode/resourcemanager/QuoqumPeerMain/Hmaster</td> </tr> <tr> <td style="text-align: center;">hadoop-datanode1</td> <td style="text-align: center;">192.168.152.154</td> <td style="text-align: center;">JDK/Zookeeper/Hadoop/HBase</td> <td style="text-align: center;">datanode/journalnode/nodemanager/QuoqumPeerMain/Hregionserver</td> </tr> </tbody> </table> <h2>二 演示搭建HBase步骤并讲解</h2> <h3>2.1 准备阶段</h3> <h4>2.1.1 查看、修改Linux系统的最大文件打开数和最大进程数</h4> <code>ulimit –a //测试环境一般不用修改,但是商业应用时一般需要修改</code> <img class="size-full wp-image-4126 aligncenter" src="http://www.xiaoten.com/usr/uploads/2016/10/1-1.png" alt="1" width="558" height="273" style=""> <code>su</code> <code>vim /etc/security/limits.conf</code> <pre class="lang:default decode:true">root soft nproc 50000 root hard nproc 50000 root soft nofile 25535 root hard nofile 25535 hadoop soft nproc 50000 hadoop hard nproc 50000 hadoop soft nofile 25535 hadoop hard nofile 25535 </pre> <h4>2.1.2 调整Linux内核参数</h4> <code>vim /etc/sysctl.conf</code> <pre class="lang:default decode:true ">net.ipv4.ip_forward= 0 net.ipv4.conf.default.rp_filter= 1 net.ipv4.conf.default.accept_source_route= 0 kernel.core_users_pid= 1 net.ipv4.tcp_syncookies= 1 net.bridge.bridge-nf-call-ip6tables= 0 net.bridge.bridge-nf-call-iptables= 0 net.bridge.bridge-nf-call-arptables= 0 kernel.mggmnb= 65536 kernel.mggmax= 65536 kernel.shmmax= 68719476736 kernel.shmall= 268435456 net.ipv4.tcp_max_syn_backlog= 65000 net.core.netdev_max_backlog= 32768 net.core.somaxconn= 32768 fs.file-max= 65000 net.core.wmem_default= 8388608 net.core.rmem_default= 8388608 net.core.rmem_max= 16777216 net.core.wmem_max= 16777216 net.ipv4.tcp_timestamps= 1 net.ipv4.tcp_synack_retries= 2 net.ipv4.tcp_syn_retries= 2 net.ipv4.tcp_mem= 94500000 915000000 927000000 net.ipv4.tcp_max_orphans= 3276800 net.ipv4.tcp_tw_reuse= 1 net.ipv4.tcp_tw_recycle= 1 net.ipv4.tcp_keepalive_time= 1200 net.ipv4.tcp_syncookies= 1 net.ipv4.tcp_fin_timeout= 10 net.ipv4.tcp_keepalive_intvl= 15 net.ipv4.tcp_keepalive_probes= 3 net.ipv4.ip_local_port_range= 1024 65535 net.ipv4.conf.eml.send_redirects= 0 net.ipv4.conf.lo.send_redirects= 0 net.ipv4.conf.default.send_redirects= 0 net.ipv4.conf.all.send_redirects= 0 net.ipv4.icmp_echo_ignore_broadcasts= 1 net.ipv4.conf.eml.accept_source_route= 0 net.ipv4.conf.lo.accept_source_route= 0 net.ipv4.conf.default.accept_source_route= 0 net.ipv4.conf.all.accept_source_route= 0 net.ipv4.icmp_ignore_bogus_error_responses= 1 kernel.core_pattern= /tmp/core vm.overcommit_memory= 1</pre> 保存修改后<code>sysctl -p</code>。 <h4>2.1.3 配置时间同步</h4> 如果集群节点时间不同步,可能会出现节点宕机或其它异常,生产环境中一般通过配置NTP服务器实现集群时间同步,需要确保各节点的时间差在10s以内,有条件最好隔一段时间同步一次。本集群在节点hadoop-namenode1中设置ntp服务器,具体方法如下: 切换至root用户 <code>su root</code> 查看、安装ntp <code>pm -qa | grep ntp</code> <code>yum install -y ntp</code> 配置时间服务器 <code>vim /etc/ntp.conf</code> 禁止所有机器连接ntp服务器 <code>restrict default ignore</code> 允许局域网内的所有机器连接ntp服务器 <code>restrict 192.168.152.0 mask 255.255.255.0 nomodify notrap</code> 使用本机作为时间服务器 <code>server 127.127.1.0</code> 启动ntp服务器 <code>service ntpd start</code> 设置ntp服务器开机自动启动 <code>chkconfig ntpd on</code> 集群其它节点通过执行crontab定时任务,每天在指定时间向ntp服务器进行时间同步,方法如下: 切换root用户 <code>su root</code> 执行定时任务,每天00:00向服务器同步时间,并写入日志 <code>crontab -e</code> <code>0 0 * * * /usr/sbin/ntpdate hadoop-namenode1>> /home/hadoop/ntpd.log</code> // 查看任务 <code>crontab -l</code> <h3>2.2 Hbase的安装、配置</h3> <h4>2.2.1 下载、安装Hbase</h4> 此处版本为: <code>hbase-1.2.2-bin.tar.gz</code> 解压安装Hbase: <code>tar zxvf hbase-1.2.2-bin.tar.gz</code> 删除安装文件: <code>rm hbase-1.2.2-bin.tar.gz</code> <h4>2.2.2 配置环境</h4> <code>cd /home/hadoop/apache/hbase-1.2.2/conf</code> <code>vim hbase-env.sh</code> <pre class="lang:default decode:true ">export JAVA_HOME=/home/hadoop/apache/jdk1.8.0_101 //设置jdk的路径 export HBASE_HEAPSIZE=1024 //设置hbase的堆(内存)的大小 export HBASE_MASTER_OPTS=”-Xmx512m” //设置hmaster的内存,企业级一般为4-8G export HBASE_REGIONSERVER_OPTS=”-Xmx1024m” //设置regionserver的大小 export HBASE_LOG_DIR=${HBASE_HOME}/logs //设置hbase日志路径 export HBASE_PID_DIR=/home/hadoop/apache/hbase-1.2.2/pids export HBASE_MANAGES_ZK=false //选用独立的zookeeper集群</pre> <code>vim hbase-site.xml</code> <pre class="lang:default decode:true "><!-- 关闭分布式日志切割,如果采用true会采用regionserver去对日志进行切割,但会产生大量的IO内存的消耗,建议填写false --> <property> <name>hbase.master.distributed.log.splitting</name> <value>false</value> </property> <!-- 设置hdfs的根路径,HRegionServers共享目录 --> <property> <name>hbase.rootdir</name> <value>hdfs://mycluster/hbase</value> </property> <!-- 开启分布式模式,false为单机模式 --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 设置HMaster的rpc端口 --> <property> <name>hbase.master.port</name> <value>60000</value> </property> <!-- 指定ZooKeeper集群位置列表 --> <property> <name>hbase.zookeeper.quorum</name> <value>hadoop-namenode1,hadoop-namenode2,hadoop-datanode1</value> </property> <!-- 指定Zookeeper数据目录,需要与ZooKeeper集群上配置相一致 --> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/hadoop/apache/zookeeper-3.4.8/data</value> </property> <!-- hbase客户端rpc扫描一次调用的行数,提高扫描速度,但是会占用一定内存 --> <property> <name>hbase.client.scanner.caching</name> <value>2000</value> </property> <!-- HRegion分裂前最大的文件大小(默认10G) --> <property> <name>hbase.hregion.max.filesize</name> <value>10737418240</value> </property> <!-- 某个HRegionServer中最大的region数量,一般设置在2000左右 --> <property> <name>hbase.regionserver.reginoSplitLimit</name> <value>2000</value> </property> <!-- StoreFile的开始合并的数量,即个数超过这个数就开始合并,值越大合并的时间越长,默认值为3 --> <property> <name>hbase.hstore.compactionThreshold</name> <value>6</value> </property> <!-- 当一个region的storefile个数多于这个值的的时候,它会执行一个合并操作(block写入,等待compact),且会阻塞更新操作。默认为7,一般可以设置为15-20左右,设置太小会影响系统的吞吐率 --> <property> <name>hbase.hstore.blockingStoreFiles</name> <value>14</value> </property> <!-- 超过memstore大小的倍数达到该值则block所有写入请求,阻塞更新操作,进行自我保护 --> <property> <name>hbase.hregion.memstore.block.multiplier</name> <value>20</value> </property> <!-- server端后排线程的sleep间隔,默认为10000,单位:ms --> <property> <name>hbase.server.thread.wakefrequency</name> <value>500</value> </property> <!-- ZooKeeper客户端同时访问的最大并发连接数,zookeeper也要设置,都设置了才能发挥作用,建议设大一点,2000左右,比较重要 --> <property> <name>hbase.zookeeper.property.maxClientCnxns</name> <value>2000</value> </property> <!-- 设置一个regionserver里面menstore占总堆的百分比,达到设定的值以后,会让大的menstore刷写到磁盘,后两个值相加要小于0.8,否则会出现out of memory,根据业务情况进行配置 --> <property> <name>hbase.regionserver.global.memstore.lowerLimit</name> <value>0.3</value> </property> <property> <name>hbase.regionserver.global.memstore.upperLimit</name> <value>0.39</value> </property> <property> <name>hbase.block.cache.size</name> <value>0.4</value> </property> <!-- RegionServer的RPC请求处理IO线程数 --> <property> <name>hbase.reginoserver.handler.count</name> <value>300</value> </property> <!-- 客户端最大重试次数,默认为10 --> <property> <name>hbase.client.retries.number</name> <value>5</value> </property> <!-- 客户端重试前的休眠时间,单位:ms --> <property> <name>hbase.client.pause</name> <value>100</value> </property> <!-- 指定ZooKeeper集群端口 --> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property></pre> <code>vim regionservers</code> //添加regionserver节点主机名 hadoop-datanode1 复制<code>hdfs-site.xml</code>到conf目录下 <code>cp /home/hadoop/apache/hadoop-2.6.0/etc/hadoop/hdfs-site.xml</code> . <code>vim backup-masters</code> //添加备用Hmaster节点主机名 hadoop-namenode2 创建hbase的缓存文件目录、日志文件目录和pid文件目录 <code>cd /home/hadoop/apache/hbase-1.2.2/</code> <code>mkdir tmp</code> <code>mkdir logs</code> <code>mkdir pids</code> <h4>2.2.3 同步hbase工作目录到集群其它节点</h4> <code>scp -r /home/hadoop/apache/hbase-1.2.2 hadoop@hadoop-namenode2:/home/hadoop/apache/</code> <code>scp -r /home/hadoop/apache/hbase-1.2.2 hadoop@hadoop-datanode1:/home/hadoop/apache/</code> <h4>2.2.4 在各节点上修改用户环境变量并使其生效,且授予权限</h4> <code>chown -R hadoop:hadoop hbase-1.2.2</code> <code>vim ~/.bash_profile</code> <pre class="lang:default decode:true">export HBASE_HOME=/home/hadoop/apache/hbase-1.2.2 export PATH=$PATH:$HBASE_HOME/bin</pre> <code>source ~/.bash_profile</code> <h3>2.3 启动集群</h3> <h4>2.3.1 在各节点上开启zookeeper集群</h4> zkServer.sh start <h4>2.3.2 在hadoop-namenode1上启动hdfs</h4> start-dfs.sh <h4>2.3.3 在hadoop-namenode2上启动yarn</h4> start-yarn.sh <h4>2.3.4 在hadoop-namenode1上启动ResourceManager</h4> yarn-daemon.sh start resourcemanager <h4>2.3.5 在hadoop-namenode1上启动hbase</h4> start-hbase.sh 启动后各节点进程如下 hadoop-namenode1: <img class="size-full wp-image-4127 aligncenter" src="http://www.xiaoten.com/usr/uploads/2016/10/2-1.png" alt="2" width="415" height="124" style=""> hadoop-namenode2: <img class="size-full wp-image-4128 aligncenter" src="http://www.xiaoten.com/usr/uploads/2016/10/3-1.png" alt="3" width="463" height="122" style=""> hadoop-datanode1: <img class="size-full wp-image-4129 aligncenter" src="http://www.xiaoten.com/usr/uploads/2016/10/4-1.png" alt="4" width="404" height="111" style=""> <h3>2.4 功能测试</h3> <h4>2.4.1 Web UI</h4> http://hadoop-namenode1:16010,可看到主Master状态 <img class="size-large wp-image-4130 aligncenter" src="http://www.xiaoten.com/usr/uploads/2016/10/5-1-1024x509.png" alt="5" width="620" height="308" style=""> http://hadoop-namenode2:16010,可看到备份Master状态 <img class="size-large wp-image-4131 aligncenter" src="http://www.xiaoten.com/usr/uploads/2016/10/6-1-1024x526.png" alt="6" width="620" height="318" style=""> <h4>2.4.2 Shell操作</h4> 进入Shell <code>hbase shell</code> 创建表<code>employee</code>,列族data > create 'employee','data' 往表employee中插入测试数据 > put 'employee','rowkey01','data:id','1001' > put 'employee','rowkey01','data:name','Henry' > put 'employee','rowkey01','data:address','Bangalore' > put 'employee','rowkey02','data:id','1002' > put 'employee','rowkey02','data:name','Messi' 检索表employee中的所有数据 > scan 'employee' <img class="size-full wp-image-4132 aligncenter" src="http://www.xiaoten.com/usr/uploads/2016/10/7-1.png" alt="7" width="609" height="418" style=""> 检索表<code>employee</code>中行键为<code>rowkey01</code>的数据 > get 'employee','rowkey01' <img class="size-full wp-image-4133 aligncenter" src="http://www.xiaoten.com/usr/uploads/2016/10/8-1.png" alt="8" width="534" height="101" style=""> 禁用表<code>employee</code>并删除它 > disable 'employee' > drop 'employee' <img class="size-full wp-image-4134 aligncenter" src="http://www.xiaoten.com/usr/uploads/2016/10/9-1.png" alt="9" width="442" height="187" style=""> <h3>2.5 HDFS、HBase动态替换节点</h3> <h4>2.5.1 Hadoop、HBase动态增加节点</h4> <h5>2.5.1.1 增加Hadoop节点</h5> 新节点的IP配置,用户创建,核对时间,修改最大文件读取数、最大用户进程数和内核参数,SSH免密码登录配置等 配置<code>hosts</code>文件,添加主机名和IP地址,且同步到其它节点 修改hadoop的配置文件<code>slaves</code>,添加新节点的主机名 复制JDK和hadoop目录到新的节点(注意新节点的hadoop的data、pids等目录需要清除数据) 新节点hadoop权限的修改 修改新节点的环境变量 在新节点中通过命令<code>Hdfs dfsadmin –setBalancerBandwidth</code>设置字节数、带宽,通过命令<code>start-balancer.sh -threshold 5</code>均衡当前的HDFS块 (threshold是平衡阈值,默认是10%,值越小负载越均衡,但需要更长的时间去执行) 在新节点通过命令<code>hadoop-daemon.sh start datanode</code>和<code>yarn-daemon.sh start nodemanager</code>启动datanode和nodemanager进程 <h5>2.5.1.2 增加HBase节点</h5> 在HBase的配置文件<code>regionserver</code>中添加新节点的主机名 复制hbase目录到新的节点(注意新节点的data等目录也需要清除数据) 在新节点通过命令<code>hbase-daemon.sh start regionserver</code>启动HRegionServer 在新节点上通过<code>hbase-daemon.sh start regionserver</code>启动regionserver 进入<code>hbase shell</code>,通过命令<code>balance_switch true</code>进行region负载平衡 <h4>2.5.2 Hadoop、HBase动态删除节点</h4> <h5>2.5.2.1 删除HBase节点</h5> 通过‘<code>graceful_stop.sh 节点名</code>’使得需要删除的节点的负载均衡停止使用 在HBase的配置文件<code>regionserver</code>中移除删除节点的主机名 <h5>2.5.2.2 删除Hadoop节点</h5> 在hadoop的配置文件<code>hdfs-site.xml</code>中添加配置: <pre class="lang:default decode:true "><property> <name>dfs.hosts.exclude</name> <value>/home/hadoop/apache/hadoop-2.6.0/etc/hadoop/exclude</value> </property></pre> 在配置文件<code>exclude</code>中添加需要删除的节点主机名 通过命令<code>hdfsafsadmin -refreshNodes</code>执行节点刷新操作,重新加载配置 通过命令<code>hadoop dfsadmin –report</code>查看集群状态 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏