Hadoop2.2.0 + HBase0.96.1.1部署实践

来源:互联网 发布:淘宝客服主管考核表 编辑:程序博客网 时间:2024/04/28 20:55

Hadoop2.2.0部署文档


一、准备工作:

1.机器准备:

IPuser/passwdhostnamerole

*172.16.16.31(萧何) lscm/izenexxxx    B5M-0169 nn/snn/rm

*172.16.16.29(大哥) lscm/izenexxxx    oscarshan-OptiPlex-990 dn/nm

*172.16.16.30(张清) lscm/izenexxxx    Caliph dn/nm

*172.16.16.47(慕容) lscm/izenexxxx  B5M-0213 dn/nm

nn:NameNode;

snn:SecondaryNameNode;

rm:ResourceManager;

dn:DataNode;

nm:NodeManager;

Hostname可以在/etc/hostname文件中修改;我这是借用别人的工作电脑,怕影响别人,就没改;真正部署的时候为了至少“看着舒服”,可以改成自己喜欢的名字如Cloud1Cloud2Cloud3之类;

创建用户:根据现有情况,172.16.16.31172.16.16.47上已经有lscm帐号并且密码相同并且拥有管理员权限,使用之;对172.16.16.29172.16.16.30,新建lscm帐号并设置相同密码并分配管理员权限;PSuseradd命令创建的用户没有home目录,不要使用;要使用adduser命令来创建用户;

分配权限:编辑/etc/sudoers文件,命令sudovi /etc/sudoers,在文件中增加lscmALL=(ALL:ALL) ALL一行;

修改绑定:编辑/etc/hosts文件,增加下面4行:

172.16.16.31B5M-0169

172.16.16.29oscarshan-OptiPlex-990

172.16.16.30Caliph

172.16.16.47B5M-0213

打通免登陆:设置4台机器之间相互免登,方法如下:

1).安装ssh工具:命令sudoapt-get install openssh-serversudoapt-get install ssh

2).依次执行如下两条命令,

ssh-keygen-t dsa -P '' -f ~/.ssh/id_dsa

cat~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

3).4台机器上~/.ssh/authorized_keys文件内容合并成一份,再分别放在原文件中;

4).修改/etc/ssh/ssh_config文件,末尾加上两行:

StrictHostKeyCheckingno

UserKnownHostsFile/dev/null

5).这样,4台机器便可以互相免登陆了

2.JDK的安装:略;

二、安装和配置Hadoop2.2.0

1.下载:

访问http://hadoop.apache.org/—>左边的Releases—>右边的Download—>Downloada release now!—>“suggestedmirror”—>stable/—>hadoop-2.2.0.tar.gz,下载安装包;源码也在同一路径下,可以一同下载下来学习研究;

2.安装:

将下载的hadoop-2.2.0.tar.gz解压在~/hadoop220下,于是HADOOP_HOME就像这样:~/hadoop220/hadoop-2.2.0

新建三个目录,用来存放将来的数据:

~/hadoop220/dfs/name

~/hadoop220/dfs/data

~/hadoop220/temp

3.配置:

总共涉及到7个配置文件要改:

~/hadoop220/hadoop-2.2.0/etc/hadoop/hadoop-env.sh

~/hadoop220/hadoop-2.2.0/etc/hadoop/yarn-env.sh

~/hadoop220/hadoop-2.2.0/etc/hadoop/slaves

~/hadoop220/hadoop-2.2.0/etc/hadoop/core-site.xml

~/hadoop220/hadoop-2.2.0/etc/hadoop/hdfs-site.xml

~/hadoop220/hadoop-2.2.0/etc/hadoop/mapred-site.xml

~/hadoop220/hadoop-2.2.0/etc/hadoop/yarn-site.xml

PS:有些.xml文件不存在,可以从.template文件复制得来;

1).配置文件hadoop-env.sh

修改JAVA_HOME值(exportJAVA_HOME=exportJAVA_HOME=/home/lscm/installedprogrames/jdk1630/jdk1.6.0_30

2).配置文件yarn-env.sh

修改JAVA_HOME值(exportJAVA_HOME=exportJAVA_HOME=/home/lscm/installedprogrames/jdk1630/jdk1.6.0_30

3).配置文件slaves

写入以下内容:

oscarshan-OptiPlex-990

Caliph

B5M-02133

4).配置文件core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://B5M-0169:9000</value>

</property>

<property>

<name>io.file.buffer.size</name>

<value>131072</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>file:/home/lscm/tmp</value>

<description>Abasefor other temporary directories.</description>

</property>

<property>

<name>hadoop.proxyuser.lscm.hosts</name>

<value>*</value>

</property>

<property>

<name>hadoop.proxyuser.lscm.groups</name>

<value>*</value>

</property>

</configuration>

5).配置文件hdfs-site.xml

<configuration>

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>B5M-0169:9001</value>

</property>

<property>

<name>dfs.namenode.name.dir</name>

<value>file:/home/lscm/hadoop220/dfs/name</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>file:/home/lscm/hadoop220/dfs/data</value>

</property>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<property>

<name>dfs.webhdfs.enabled</name>

<value>true</value>

</property>

<property>

<name>dfs.datanode.max.xcievers</name>

<value>4096</value>

</property>

</configuration>

6).配置文件mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>B5M-0169:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>B5M-0169:19888</value>

</property>

</configuration>

7).配置文件yarn-site.xml

<configuration>

<property>

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

<name>yarn.resourcemanager.address</name>

<value>B5M-0169:8032</value>

</property>

<property>

<name>yarn.resourcemanager.scheduler.address</name>

<value>B5M-0169:8030</value>

</property>

<property>

<name>yarn.resourcemanager.resource-tracker.address</name>

<value>B5M-0169:8031</value>

</property>

<property>

<name>yarn.resourcemanager.admin.address</name>

<value>B5M-0169:8033</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.address</name>

<value>B5M-0169:8088</value>

</property>

</configuration>

将上述7个配置文件复制到所有其他节点对应路径下;PS:这里有一个值得注意的地方,如果所有机器环境路径都一样,上面的7个文件就会完全相同,便可以配置一次然后完全复制;如果机器环境不一样,比如JAVA_HOME不一样,就得分别配置每台机器上的hadoop-env.shyarn-env.sh文件;

三、启动和使用:

进入HADOOP_HOME目录:cd~/hadoop220/hadoop-2.2.0/

1).格式化namenode./bin/hdfsnamenode –format

2).启动hdfs:./sbin/start-dfs.sh

启动成功之后,在B5M-0169上面运行的进程有:NameNodeSecondaryNameNodeoscarshan-OptiPlex-990CaliphB5M-0213上面运行的进程有:DataNode

3).启动yarn:./sbin/start-yarn.sh

此时,B5M-0169上面运行的进程有:NameNodeSecondaryNameNode ResourceManager;在oscarshan-OptiPlex-990CaliphB5M-0213上面运行的进程有:DataNodeNodeManager

查看集群状态:./bin/hdfsdfsadmin –report

查看HDFS:http://172.16.16.31:50070

查看RM:http://172.16.16.31:8088

附:hdfs常用命令:

./hadoopfs -ls

./hadoopfs -ls input

./hadoopfs -lsr input

./hadoopfs -mkdir input/data

./hadoopfs -puttest.txt input/data

./hadoopfs -cat input/data/test.txt

./hadoopfs -getinput/data/test.txt ./

./hadoopfs -tailinput/data/test.txt

./hadoopfs -rminput/data/test.txt

./hadoopfs -help ls








HBase0.96.1.1部署文档:

一、准备工作:同Hadoop2.2.0部分;

二、安装和配置HBase0.96.1.1

1.下载:

访问http://hbase.apache.org—>左边Downloads—>“suggestedmirror”—>hbase-0.96.1.1—>hbase-0.96.1.1-hadoop2-bin.tar.gz,下载安装包,源码在同一个包中;

2.安装

将下载的hbase-0.96.1.1-hadoop2-bin.tar.gz解压在~/hbase09611路径下,HBASE_HOME便像这样:~/hbase09611/hbase-0.96.1.1-hadoop2

3.配置

一个HadoopHDFS Datanode 有一个同时处理文件的上限.在配置Hbase之前,先确认下Hadoop的这个文件etc/hadoop/hdfs-site.xml里面的xceivers参数,至少要有4096:

<property>

<name>dfs.datanode.max.xcievers</name>

<value>4096</value>

</property>

然后重启HadoopHDFS系统;

需要修改的HBase的配置文件总共涉及到3个:

~/hbase09611/hbase-0.96.1.1-hadoop2/conf/hbase-env.sh

~/hbase09611/hbase-0.96.1.1-hadoop2/conf/hbase-site.xml

~/hbase09611/hbase-0.96.1.1-hadoop2/conf/regionservers

1).配置文件hbase-env.sh:

exportJAVA_HOME=/home/lscm/jdk1630/jdk1.6.0_30

exportHBASE_MANAGES_ZK=true(这个目的是让HBase托管ZooKeeper

2).配置文件hbase-site.xml

<configuration>

<property>

<name>hbase.rootdir</name>

<value>hdfs://B5M-0169:9000/hbase</value>

</property>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<property>

<name>hbase.zookeeper.property.clientPort</name>

<value>2222</value>

</property>

<property>

<name>hbase.zookeeper.quorum</name>

<value>oscarshan-OptiPlex-990,Caliph,B5M-0213</value>

</property>

<property>

<name>hbase.zookeeper.property.dataDir</name>

<value>/home/lscm/hbase09611/zookeeper</value>

</property>

</configuration>

3).配置文件regionservers

B5M-0169

oscarshan-OptiPlex-990

Caliph

B5M-0213

三、启动和使用:

首先确认HDFS系统是运行着的,如果还没运行就到~/hadoop220/hadoop-2.2.0/sbin/下启动./start-dfs.sh

1).启动HBase

~/hbase09611/hbase-0.96.1.1-hadoop2/bin路径下执行./start-hbase.sh脚本;

此时,B5M-0169上面运行的进程有:HMasteroscarshan-OptiPlex-990CaliphB5M-0213上面运行的进程有:HRegionServerHQuorumPeer

访问资源页:http://172.16.16.31:60010可以看到HBase各项参数和属性

也可以到~/hbase09611/hbase-0.96.1.1-hadoop2/bin路径下执行./hbaseshell,进入HBase的命令行交互界面;

附:HBase常用命令:

create'test2', 'cf'

list

list'test2'

put'test2', 'row1', 'cf:a', 'value1'

scan'test2'

disable'test2'

drop'test2'

附:最基本的用java操作数据库代码:

publicclassDemo {

@SuppressWarnings("deprecation")

publicstaticvoidmain(String args[]) {

try{

//获得Hbase配置参数

Configurationconfig = HBaseConfiguration.create();

config.set("hbase.master","172.16.16.31");

config.set("hbase.master.port","60010");

config.set("hbase.zookeeper.quorum","172.16.16.29,172.16.16.30,172.16.16.47");

config.set("hbase.zookeeper.property.clientPort","2222");

HBaseAdminadmin =newHBaseAdmin(config);//新建一个数据库管理员

if(admin.tableExists("info")){//测试要操作的表是否已经存在

System.out.println("Targettable exist,drop it...");

admin.disableTable("info");//关闭一个表

admin.deleteTable("info");//删除一个表

}

System.out.println("createtable------------------------------------------------");

//新建一个info表的描述

HTableDescriptortableDescripter =newHtableDescriptor("info".getBytes());

//HTableDescriptor.parseFrom("info".getBytes());

tableDescripter.addFamily(newHColumnDescriptor("details"));//在表描述中添加列族

admin.createTable(tableDescripter);//根据配置好的描述建表

HTablehtable =newHTable(config,"info");//返回表info的实例

htable.setAutoFlush(true,true);

htable.setWriteBufferSize(1024* 1024 * 100);

byte[]rowkey = Bytes.toBytes("rowkey");

Putput =newPut(rowkey);

put.add(Bytes.toBytes("details"),Bytes.toBytes("name"),Bytes.toBytes("liuyue"));

put.add(Bytes.toBytes("details"),Bytes.toBytes("num"),Bytes.toBytes("24"));

put.add(Bytes.toBytes("details"),Bytes.toBytes("time"),Bytes.toBytes("2011"));

htable.put(put);

htable.flushCommits();

Getget =newGet(Bytes.toBytes("rowkey"));//新建Get实例,根据条件返回一个指定行里的数据

Resultr = htable.get(get);//返回一个指定行里的数据

byte[]value1 = r.getValue(Bytes.toBytes("details"),Bytes.toBytes("name"));

byte[]value2 = r.getValue(Bytes.toBytes("details"),Bytes.toBytes("num"));

byte[]value3 = r.getValue(Bytes.toBytes("details"),Bytes.toBytes("time"));

System.out.println(newString(value1));

System.out.println(newString(value2));

System.out.println(newString(value3));

htable.close();

admin.close();

}

catch(Exception e) {

e.printStackTrace();

}

}

}


hbase(main):010:0>scan 'info'

ROW COLUMN+CELL

rowkey column=details:name,timestamp=1390706177556, value=liuyue

rowkey column=details:num,timestamp=1390706177556, value=24

rowkey column=details:time,timestamp=1390706177556, value=2011

1row(s) in 0.0090 seconds

0 0
原创粉丝点击