Hadoop安装部署基本步骤:
1、安装jdk,配置环境变量。
jdk可以去网上自行下载,环境变量如下:
编辑 vim /etc/profile 文件,添加如下内容:
export JAVA_HOME=/opt/java_environment/jdk1.7.0_80(填写自己的jdk安装路径)
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
输入命令,source /etc/profile 使配置生效
分别输入命令,java 、 javac 、 java -version,查看jdk环境变量是否配置成功
2、linux环境下,至少需要3台机子,一台作为master,2台(以上)作为slave。
这里我以3台机器为例,linux用的是CentOS 6.5 x64为机器。
master 192.168.172.71
slave1 192.168.172.72
slave2 192.168.172.73
3、配置所有机器的hostname和hosts。
(1)更改hostname,可以编辑 vim /etc/sysconfig/network
更改master的HOSTNAME,这里改为HOSTNAME=master
其它slave为HOSTNAME=slave1、HOSTNAME=slave2 ,重启后生效。
或者直接输: hostname 名字,更改成功,这种方式无需重启即可生效,
但是重启系统后更改的名字会失效,仍是原来的名字
(2)更改host,可以编辑 vim /etc/hosts,增加如下内容:
192.168.172.71 master
192.168.172.72 slave1
192.168.172.73 slave2
hosts可以和hostname不一致 ,这里为了好记就写一致了。
4、配置SSH所有机器之间免密码登录
(1)CentOS默认没有启动ssh无密登录,编辑 vim /etc/ssh/sshd_config,
去掉以下两行注释,开启Authentication免登陆。
#RSAAuthentication yes
#PubkeyAuthentication yes
如果是root用户下进行操作,还要去掉 #PermitRootLogin yes注释,允许root用户登录。
(2)输入命令,ssh-keygen -t rsa,生成key,一直按回车,
就会在/root/.ssh生成:authorized_keys id_rsa.pub id_rsa 三个文件,
这里要说的是,为了各个机器之间的免登陆,在每一台机器上都要进行此操作。
(3) 接下来,在master服务器,合并公钥到authorized_keys文件,
进入/root/.ssh目录,输入以下命令
cat id_rsa.pub>> authorized_keys 把master公钥合并到authorized_keys 中
ssh root@192.168.172.72 cat ~/.ssh/id_rsa.pub>> authorized_keys
ssh root@192.168.172.73 cat ~/.ssh/id_rsa.pub>> authorized_keys
把slave1、slave2公钥合并到authorized_keys 中
完成之后输入命令,把authorized_keys远程copy到slave1和slave2之中
scp authorized_keys 192.168.172.72:/root/.ssh/
scp authorized_keys 192.168.172.73:/root/.ssh/
最好在每台机器上进行chmod 600 authorized_keys操作,
使当前用户具有 authorized_keys的读写权限。
拷贝完成后,在每台机器上进行 service sshd restart 操作, 重新启动ssh服务。
之后在每台机器输入 ssh 192.168.172.xx,测试能否无需输入密码连接另外两台机器。
5、配置Hadoop环境变量,HADOOP_HOME、hadoop-env.sh、yarn-env.sh。
(1)配置HADOOP_HOME,编辑 vim /etc/profile 文件,添加如下内容:
export HADOOP_HOME=/opt/hbase/hadoop-2.7.3 (Hadoop的安装路径)
export PATH=$PATH:$HADOOP_HOME/sbin
export PATH=$PATH:$HADOOP_HOME/bin
(以下两行最好加上,若没有启动Hadoop、hbase时都会有没加载lib成功的警告)
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
(2)配置hadoop-env.sh、yarn-env.sh,在Hadoop安装目录下
编辑 vim etc/hadoop/hadoop-env.sh
加入export JAVA_HOME=/opt/java_environment/jdk1.7.0_80(jdk安装路径)
编辑 vim etc/hadoop/yarn-env.sh
加入export JAVA_HOME=/opt/java_environment/jdk1.7.0_80(jdk安装路径)
保存退出
6、配置基本相关xml,core-site.xml、hdfs-site.xml、mapred-site.xml、mapred-site.xml
(1)配置core-site.xml,在Hadoop安装目录下 编辑 vim etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name> <!--NameNode 的URI-->
<value>hdfs://mater:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name> <!--hadoop临时文件的存放目录-->
<value>/opt/hbase/hadoop-2.7.3/temp</value>
</property>
</configuration>
(2)配置hdfs-site.xml,在Hadoop安装目录下 编辑 vim etc/hadoop/hdfs-site.xml
<configuration>
<property> <!--namenode持久存储名字空间及事务日志的本地文件系统路径-->
<name>dfs.namenode.name.dir</name>
<value>/opt/hbase/hadoop-2.7.3/dfs/name</value>
<!--目录无需预先创建,会自动创建-->
</property>
<property> <!--DataNode存放块数据的本地文件系统路径-->
<name>dfs.datanode.data.dir</name>
<value>/opt/hbase/hadoop-2.7.3/dfs/data</value>
</property>
<property> <!--数据需要备份的数量,不能大于集群的机器数量,默认为3-->
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property> <!--设置为true,可以在浏览器中IP+port查看-->
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
(3)配置mapred-site.xml,在Hadoop安装目录下 编辑 vim etc/hadoop/mapred-site.xml
<configuration>
<property> <!--mapreduce运用了yarn框架,设置name为yarn-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property> <!--历史服务器,查看Mapreduce作业记录-->
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
(4)配置yarn-site.xml,在Hadoop安装目录下 编辑 vim etc/hadoop/yarn-site.xml
<configuration>
<property> <!--NodeManager上运行的附属服务,用于运行mapreduce-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property> <!--ResourceManager 对客户端暴露的地址-->
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property> <!--ResourceManager 对ApplicationMaster暴露的地址-->
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property> <!--ResourceManager 对NodeManager暴露的地址-->
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property> <!--ResourceManager 对管理员暴露的地址-->
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property> <!--ResourceManager 对外web暴露的地址,可在浏览器查看-->
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
7、配置slaves文件
在Hadoop安装目录下,编辑vim etc/hadoop/slaves,
去除默认的localhost,加入slave1、slave2,保存退出。
8、通过远程复制命令scp,将配置好的Hadoop复制到各个节点对应位置
scp -r /opt/hadoop-2.7.3 192.168.172.72:/opt/hadoop-2.7.3
scp -r /opt/hadoop-2.7.3 192.168.172.73:/opt/hadoop-2.7.3
9、Hadoop的启动与停止
(1)在Master服务器启动hadoop,从节点会自动启动,进入Hadoop目录下,
输入命令,bin/hdfs namenode -format进行hdfs格式化
输入命令,sbin/start-all.sh,进行启动
也可以分开启动,sbin/start-dfs.sh、sbin/start-yarn.sh
在master 上输入命令:jps, 看到ResourceManager、
NameNode、SecondaryNameNode进程
在slave 上输入命令:jps, 看到DataNode、NodeManager进程
出现这5个进程就表示Hadoop启动成功。
(2)接下来配置本地hosts,编辑 C:\Windows\System32\drivers\etc的hosts文件,加入
192.168.172.71 master
192.168.172.72 slave1
192.168.172.73 slave2
在浏览器中输入http://master:50070查看master状态,
输入http://192.168.172.72:8088查看集群状态
(3)停止hadoop,进入Hadoop目录下,输入命令:sbin/stop-all.sh,
即可停止master和slave的Hadoop进程
Hbase安装部署基本步骤:
1、在Hadoop配置的基础上,配置环境变量HBASE_HOME、hbase-env.sh
编辑 vim /etc/profile 加入
export HBASE_HOME=/opt/hbase-1.2.6
export PATH=$HBASE_HOME/bin:$PATH
编辑vim /opt/hbase-1.2.6/conf/hbase-env.sh 加入
export JAVA_HOME=/opt/java_environment/jdk1.7.0_80(jdk安装路径)
去掉注释 # export HBASE_MANAGES_ZK=true,使用hbase自带zookeeper。
2、配置hbase-site.xml文件
<configuration>
<property>
<name>hbase.rootdir</name> <!-- hbase存放数据目录 -->
<value>hdfs://master:9000/opt/hbase/hbase_db</value>
<!-- 端口要和Hadoop的fs.defaultFS端口一致-->
</property>
<property>
<name>hbase.cluster.distributed</name> <!-- 是否分布式部署 -->
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name> <!-- list of zookooper -->
<value>master,slave1,slave2</value>
</property>
<property><!--zookooper配置、日志等的存储位置 -->
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/hbase/zookeeper</value>
</property>
</configuration>
3、配置regionservers
编辑 vim /opt/hbase-1.2.6/conf/regionservers 去掉默认的localhost,
加入slave1、slave2,保存退出
然后把在master上配置好的hbase,通过远程复制命令
scp -r /opt/hbase-1.2.6 192.168.172.72/73:/opt/hbase-1.2.6
复制到slave1、slave2对应的位置
4、启动与停止Hbase
(1)在Hadoop已经启动成功的基础上,输入start-hbase.sh,过几秒钟便启动完成,
输入jps命令查看进程是否启动成功,若 master上出现HMaster、HQuormPeer,
slave上出现HRegionServer、HQuorumPeer,就是启动成功了。
(2)输入hbase shell 命令 进入hbase命令模式
输入status命令可以看到如下内容,1个master,2 servers,3机器全部成功启动。
1 active master, 0 backup masters, 2 servers, 0 dead, 2.0000 average load
(3)接下来配置本地hosts,(前边配置过的无需再配置了)
编辑 C:\Windows\System32\drivers\etc的hosts文件,加入
192.168.172.71 master
192.168.172.72 slave1
192.168.172.73 slave2
在浏览器中输入http://master:16010就可以在界面上看到hbase的配置了
(4)当要停止hbase时输入stop-hbase.sh,过几秒后hbase就会被停止了。
- 进入hbase shell console
$HBASE_HOME/bin/hbase shell
如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成功之后再使用hbase shell进入可以使用whoami命令可查看当前用户hbase(main)>
whoami
- 表的管理
1)查看有哪些表hbase(main)> list
2)创建表
# 语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
# 例如:创建表t1,有两个family name:f1,f2,且版本数均为2
hbase(main)> create
't1'
,{NAME =>
'f1'
, VERSIONS => 2},{NAME =>
'f2'
, VERSIONS => 2}
3)删除表
分两步:首先disable,然后drop
例如:删除表t1hbase(main)> disable
't1'
hbase(main)> drop
't1'
4)查看表的结构
# 语法:describe <table>
# 例如:查看表t1的结构
hbase(main)> describe
't1'
5)修改表结构
修改表结构必须先disable# 语法:alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
# 例如:修改表test1的cf的TTL为180天
hbase(main)> disable
'test1'
hbase(main)> alter
'test1'
,{NAME=>
'body'
,TTL=>
'15552000'
},{NAME=>
'meta'
, TTL=>
'15552000'
}
hbase(main)>
enable
'test1'
- 权限管理
1)分配权限# 语法 : grant <user> <permissions> <table> <column family> <column qualifier> 参数后面用逗号分隔
# 权限用五个字母表示: "RWXCA".
# READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A')
# 例如,给用户‘test'分配对表t1有读写的权限,
hbase(main)> grant
'test'
,
'RW'
,
't1'
2)查看权限
# 语法:user_permission <table>
# 例如,查看表t1的权限列表
hbase(main)> user_permission
't1'
3)收回权限
# 与分配权限类似,语法:revoke <user> <table> <column family> <column qualifier>
# 例如,收回test用户在表t1上的权限
hbase(main)> revoke
'test'
,
't1'
- 表数据的增删改查
1)添加数据# 语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
# 例如:给表t1的添加一行记录:rowkey是rowkey001,family name:f1,column name:col1,value:value01,timestamp:系统默认
hbase(main)> put
't1'
,
'rowkey001'
,
'f1:col1'
,
'value01'
用法比较单一。
2)查询数据
a)查询某行记录# 语法:get <table>,<rowkey>,[<family:column>,....]
# 例如:查询表t1,rowkey001中的f1下的col1的值
hbase(main)> get
't1'
,
'rowkey001'
,
'f1:col1'
# 或者:
hbase(main)> get
't1'
,
'rowkey001'
, {COLUMN=>
'f1:col1'
}
# 查询表t1,rowke002中的f1下的所有列值
hbase(main)> get
't1'
,
'rowkey001'
b)扫描表
# 语法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num}
# 另外,还可以添加STARTROW、TIMERANGE和FITLER等高级功能
# 例如:扫描表t1的前5条数据
hbase(main)> scan
't1'
,{LIMIT=>5}
c)查询表中的数据行数
# 语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}
# INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度
# 例如,查询表t1中的行数,每100条显示一次,缓存区为500
hbase(main)> count
't1'
, {INTERVAL => 100, CACHE => 500}
3)删除数据
a )删除行中的某个列值# 语法:delete <table>, <rowkey>, <family:column> , <timestamp>,必须指定列名
# 例如:删除表t1,rowkey001中的f1:col1的数据
hbase(main)> delete
't1'
,
'rowkey001'
,
'f1:col1'
注:将删除改行f1:col1列所有版本的数据
b )删除行# 语法:deleteall <table>, <rowkey>, <family:column> , <timestamp>,可以不指定列名,删除整行数据
# 例如:删除表t1,rowk001的数据
hbase(main)> deleteall
't1'
,
'rowkey001'
c)删除表中的所有数据
# 语法: truncate <table>
# 其具体过程是:disable table -> drop table -> create table
# 例如:删除表t1的所有数据
hbase(main)> truncate
't1'
- Region管理
1)移动region# 语法:move 'encodeRegionName', 'ServerName'
# encodeRegionName指的regioName后面的编码,ServerName指的是master-status的Region Servers列表
# 示例
hbase(main)>move
'4343995a58be8e5bbc739af1e91cd72d'
,
'db-41.xxx.xxx.org,60020,1390274516739'
2)开启/关闭region
# 语法:balance_switch true|false
hbase(main)> balance_switch
3)手动split
# 语法:split 'regionName', 'splitKey'
4)手动触发major compaction
#语法:
#Compact all regions in a table:
#hbase> major_compact 't1'
#Compact an entire region:
#hbase> major_compact 'r1'
#Compact a single column family within a region:
#hbase> major_compact 'r1', 'c1'
#Compact a single column family within a table:
#hbase> major_compact 't1', 'c1'
- 配置管理及节点重启
1)修改hdfs配置
hdfs配置位置:/etc/hadoop/conf# 同步hdfs配置
cat
/home/hadoop/slaves
|
xargs
-i -t
scp
/etc/hadoop/conf/hdfs-site
.xml hadoop@{}:
/etc/hadoop/conf/hdfs-site
.xml
#关闭:
cat
/home/hadoop/slaves
|
xargs
-i -t
ssh
hadoop@{}
"sudo /home/hadoop/cdh4/hadoop-2.0.0-cdh4.2.1/sbin/hadoop-daemon.sh --config /etc/hadoop/conf stop datanode"
#启动:
cat
/home/hadoop/slaves
|
xargs
-i -t
ssh
hadoop@{}
"sudo /home/hadoop/cdh4/hadoop-2.0.0-cdh4.2.1/sbin/hadoop-daemon.sh --config /etc/hadoop/conf start datanode"
2)修改hbase配置
hbase配置位置:# 同步hbase配置
cat
/home/hadoop/hbase/conf/regionservers
|
xargs
-i -t
scp
/home/hadoop/hbase/conf/hbase-site
.xml hadoop@{}:
/home/hadoop/hbase/conf/hbase-site
.xml
# graceful重启
cd
~
/hbase
bin
/graceful_stop
.sh --restart --reload --debug inspurXXX.xxx.xxx.org