hadoop集群部署-笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
hadoop集群部署1) 安装jdk
下载jdk-6u21-linux-i586.bin
然后修改/etc/profile:
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin
保存,并执行source /etc/profile
2) 配置host
Namenode的机器,需要配置集群中所有机器的ip
修改/etc/hosts
10.10.236.190 master
10.10.236.191 slave-A
10.10.236.193 slave-B
其他的datanode的/etc/hosts 只需要配置namenode的机器ip和本机ip 10.10.236.190 master
10.10.236.191 slave-A
修改hostname(可选)
vi /proc/sys/kernel/hostname
3) 建立ssh无密码登录
首先进到root目录下
root@master:~# $ssh-keygen -t rsa
进入.ssh目录
root@master:~/.ssh# cp id_rsa.pub authorized_keys
其余的datanode的机器
新建.ssh目录
root@slave-A:~# mkdir .ssh
在name(master)上远程拷贝
root@master:~/.ssh# scp authorized_keys slave-A:/root/.ssh/
测试ssh
4) 安装hadoop
下载Hadoop 解压到每台服务器的/data/soft
解压
root@master:/data/soft# tar zxvf hadoop-0.21.0.tar.gz
建立软连
root@master:/data/soft# ln -s hadoop-0.21.0 hadoop
然后修改/etc/profile
export HADOOP_HOME=/data/soft/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
5) 配置hadoop
1.修改conf/hadoop-env.sh,添加jdk支持
export JAVA_HOME=/usr/local/jdk
如果ssh端口不是默认的22,在conf/hadoop-env.sh里改下。
如:
export HADOOP_SSH_OPTS="-p 1234"
2.修改conf/core-site.xml,增加下面内容
<property>
<name></name>
<value>hdfs://master:54310</value> //这个才是真正决定namenode
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hdfs/tmp</value>//临时文件,有问题的时候,可以删除
<description>A base for other temporary directories.</description>
</property>
3.修改conf/hdfs-site.xml,增加下面内容
<property>
<name>.dir</name>
<value>/data/hdfs/name</value> //namenode持久存储名字空间,事务日志的本地路径</property>
<property>
<name>dfs.data.dir</name>
<value>/data/hdfs/data</value> //datanode存放数据的路径
</property>
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value> //数据备份的个数,默认是3
</property>
3.修改conf/mapred-site.xml,增加下面内容
<property>
<name>mapred.job.tracker</name> //jobTracker的主机
<value>master:54311</value>
</property>
4. .修改conf/masters,这个决定那个是secondarynamenode
master
5 .修改conf/slaves,这个是所有datanode的机器
slaves-A
slaves-B
6) 将配置好的hadoop拷贝到所有的datanode
root@master:/data/soft/hadoop/conf# scp -rp /data/soft/hadoop-0.21.0 10.10.236.191:/data/soft/hadoop-0.21.0 在datanode上建立对应的软连
7) 格式化hdfs文件系统的namenode
root@master:/data/soft/hadoop# bin/hadoop namenode –format
输入Y
8) 启动hadoop集群
root@master:/data/soft/hadoop# bin/start-all.sh
9) Hdfs操作
建立目录
root@master:/data/soft/hadoop # bin/hadoop dfs -mkdir testdir
查看现有文件
root@master:/data/soft/hadoop # bin/hadoop dfs -ls
10) 关闭Hdfs
root@master:/data/soft/hadoop# bin/stop-all.sh
hadoop部署注意项
namenode磁盘: sas带RAID,多磁盘存储文件系统元信息.
datanode配置: 不带RAID, 双网卡: 一个用于内部数据传输,一个用于外部数据传输.
hadoop各节点的分布:namenode和jobtracker部署:nam enode与jobtracker分离.tasktracker与datanode配对.
Trash: hadoop回收站功能默认是禁止的,删除文件,就是直接删除了,所以要记得配置好trash。
trash功能还是不错的,当rm 后,它会move到当前文件夹下的.Trash目录下,误删文件后,可以到对应的.Trash目录下恢复文件,参考配置属性fs.trash.interval。
备份:namendoe的元数据切记做好多处备份,包括热备和冷备,否则元数据一丢,整个集群的数据都无法恢复了。
热备:namenode 的元数据配置写两份,一分写本地,另一份写远程nfs。
冷备:定时拷贝nam enode的元数据到远程的nfs,保留十天甚至更长。
Datanode的数据目录:如果datanode对应的机器上有多块磁盘,例如/disk1-/disk3,dfs.data.dir可以配置
为”/disk1/data,/disk2/data,/disk3/data”,datanode会在写数据时,以轮询的方式选择一个目录写入数据,一般这些目录是不同的块设备,不存在的目录会被忽略掉,参考配置属性dfs.data.dir.datanode如果有多个磁盘不建议做raid,因为做raid会有性能损失,还会导致一个磁盘坏了,整个硬盘也不能用了,而hadoop可以规避这个问题。
Tasktracker的中间输出目录: MapReduce产生的中间数据会特别多,为了减少磁盘压力,如果机器有多个磁盘,也可以像datanode的数据目录设为”/disk1/local,/disk2/local,/disk3/local”,参考配置属性mapred.local.dir。
map和reduce任务的JVM选项:mapred.child.java.opts配置map和reduce子进程的JVM属性,如果内存充裕,可以改为-Xmx2400m.
Tasktracker的map和reducer数量配置: 属性mapred.tasktracker.map.tasks.maximum配置这个tasktracker同时可以最多跑多少个map task,要根据tracker的内存和磁盘情况规划。
还有属性mapred.tasktracker.reduce.tasks.maximum配置这个tasktracker同时可以最多跑多少个reduce task.同理也是要根据tracker的内存和磁盘情况规划。
缓冲区大小:io.file.buffer.size默认是4KB,作为hadoop缓冲区,用于hadoop读hdfs的文件和写hdfs的文件,还有map的输出都用到了这个缓冲区容量,对于现在的硬件很保守,可以设置为128k(131072),甚至是1M(太大了map和reduce任务可能会内存溢出)。
noatime的设置:为了充分发挥性能,需要使用noatime选项挂载磁盘,表示执行读操作时,不更新文件的访问时间,可以显著提供性能。
hadoop配置文件说明
1、dfs.hosts 记录即将作为datanode加入集群的机器列表
2、mapred.hosts 记录即将作为tasktracker加入集群的机器列表
3、dfs.hosts.exclude mapred.hosts.exclude 分别包含待移除的机器列表
4、master 记录运行辅助nam enode的机器列表
5、slave 记录运行datanode和tasktracker的机器列表
6、hadoop-env.sh 记录脚本要用的环境变量,以运行hadoop
7、core-site.xml hadoop core的配置项,例如hdfs和mapreduce常用的i/o设置等
8、hdfs-site.xml hadoop守护进程的配置项,包括namenode、辅助namenode和datanode等
9、mapred-site.xml mapreduce守护进程的配置项,包括jobtracker和tasktracker
10、hadoop-metrics.properties 控制metrics在hadoop上如何发布的属性
11、log4j.properties 系统日志文件、namenode审计日志、tasktracker子进程的任务日志的属性
hadoop集群默认配置和常用配置
获取默认配置
配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配置文件,默认下来,这些配置文件都是空的,所以很难知道这些配置文件有哪些配置可以生效,上网找的配置可能因为各个hadoop版本不同,导致无法生效。
浏览更多的配置,有两个方法:
1.选择相应版本的hadoop,下载解压后,搜索*.xml,找到core-default.xml,hdfs-default.xml,mapred-default.xml,这些就是默认配置,可以参考这些配置的说明和key,配置hadoop集群。
2.浏览apache官网,三个配置文件链接如下:
/common/docs/r0.20.2/core-default.html
/common/docs/r0.20.2/hdfs-default.html
/common/docs/r0.20.0/mapred-default.html
其中第一个方法找到默认的配置是最好的,因为每个属性都有说明,可以直接使用。
另外,core-site.xml是全局配置,hdfs-site.xml和mapred-site.xml分别是hdfs和mapred的局部配置。
常用的端口配置
HDFS端口
MR端口
其他端口
Hbase配置手册
环境:
操作系统:ubuntu 12.10 64bit
jdk:sun jdk 1.6 64bit
hadoop:apache hadoop 1.02
hbase:apache hbase 0.92
先决条件:配置apache hadoop append,默认这个属性是false,需要设置为true
1)下载hbase
解压到每台服务器的/data/soft
解压
root@master:/data/soft# tar zxvf hbase-0.92.0.tar.gz
建立软连
root@master:/data/soft# ln -s hbase-0.92.0 hbase
2)配置hbase
前提是安装完成hadoop,默认在namenode上进行
1.修改conf/hbase-env.sh,添加jdk支持
export JAVA_HOME=/usr/local/jdk
export HBASE_MANAGES_ZK=true
export HBASE_LOG_DIR=/data/logs/hbase
2. 修改conf/hbase-site.xml,
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>hdfs://master:60000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>slave-001,slave-002,slave-003</value>
<description>Comma separated list of servers in the ZooKeeper Quorum. For example, ",,". By default this is set to localhost for local and pseudo-distributed modes of operation. For a fully-distributed setup, this should be set to a full list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh this is the list of servers which we will start/stop ZooKeeper on. </description>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/data/work/zookeeper</value>
<description>Property from ZooKeeper's config zoo.cfg. The directory where the snapshot is stored. </description> </property>
hbase.rootdir设置hbase在hdfs上的目录,主机名为hdfs的namenode节点所在的主机
hbase.cluster.distributed设置为true,表明是完全分布式的hbase集群
hbase.master设置hbase的master主机名和端口
hbase.zookeeper.quorum设置zookeeper的主机,建议使用单数
3.修改hadoop的目录下的conf/hdfs-site.xml
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
4.修改conf/regionservers
将所有的datanode添加到这个文件,类似与hadoop中slaves文件
5.拷贝hbase到所有的节点
6. 启动hbase
$ ./bin/start-hbase.sh
7 hbase自带的web界面
http://master:60010/
8 测试
1).登录hbase客户端
./bin/hbase shell
2).新建数据表,并插入3条记录
hbase(main):003:0> create 'test', 'cf'
0 row(s) in 1.2200 seconds
hbase(main):003:0> list 'table'
test
1 row(s) in 0.0550 seconds
hbase(main):004:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.0560 seconds
hbase(main):005:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0370 seconds
hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0450 seconds
3).查看插入的数据
hbase(main):007:0> scan 'test'
ROW COLUMN+CELL
row1 column=cf:a, timestamp=1288380727188, value=value1
row2 column=cf:b, timestamp=1288380738440, value=value2
row3 column=cf:c, timestamp=1288380747365, value=value3
3 row(s) in 0.0590 seconds
4).读取单条记录
hbase(main):008:0> get 'test', 'row1'
COLUMN CELL
cf:a timestamp=1288380727188, value=value1
1 row(s) in 0.0400 seconds
5).停用并删除数据表
hbase(main):012:0> disable 'test'
0 row(s) in 1.0930 seconds
hbase(main):013:0> drop 'test'
0 row(s) in 0.0770 seconds
6).退出
hbase(main):014:0> exit
hive部署手册安装环境:
机器只需要安装一台机器
操作系统:Ubuntu 11.04 64操作系统
hadoop:版本是1.0.2,安装在/usr/local/hadoop
sun jdk:版本是1.6.0_31 64bit,安装在/usr/local/jdk
hive:版本是0.8.1,安装在/usr/local/hive
安装步骤:
1.下载
下载hive:/apache-mirror/hive/hive-0.8.1/hive-0.8.1.tar.gz
2.安装
(1)上传hive安装包到机器上,使用root用户登陆:
tar -xvf hive-0.8.1.tar.gz
(2)将解压的hive分别移动并改名为/usr/local/hive
rm -rf /usr/local/hive
mv hive-0.8.1 /usr/local/hive
3.配置hive
(1)修改/usr/local/hive/bin/hive-config.sh
在文件末尾加入
export JAVA_HOME=/usr/local/jdk
export HIVE_HOME=/usr/local/hive
export HADOOP_HOME=/usr/local/hadoop
(2) 根据hive-default.xml复制hive-site.xml
cp /usr/local/hive/conf/hive-default.xml /usr/local/hive/conf/hive-site.xml
(3)配置hive-site.xml,主要配置项如下:
hive.metastore.warehouse.dir:(HDFS上的)数据目录
hive.exec.scratchdir:(HDFS上的)临时文件目录
hive.metastore.warehouse.dir默认值是/user/hive/warehouse
hive.exec.scratchdir默认值是/tmp/hive-${}
以上是默认值,暂时不改。
(4)改变/usr/local/hiv e的目录所有者为hadoop
chown -R hadoop:hadoop /usr/local/hive
(5)配置hive的log4j:
cp /usr/loca/hive/conf/hive-log4j.properties.template /usr/loca/hive/conf/hive-log4j.properties 修改/usr/loca/hive/conf/hive-log4j.properties将org.apache.hadoop.metrics.jvm.EventCounter改为org.apache.hadoop.log.metrics.EventCounter
(6)启动hiv e
使用hadoop用户登陆,执行/usr/local/hive/bin/hive
(7)测试hive
hive> create TABLE pokes( id INT, name string);
hive> SHOW TABLES;
hive> select * from pokes;
hive> drop table pokes;
4.优化hive
默认meta数据库为derby ,为了避免使用默认的Derby数据库(有并发访问和性能的问题),通常还需要配置元数据库为MySQL
修改配置文件conf/hive-site.xml
<property>
<name>hive.metastore.local</name>
<value>false</value>
<description>controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://mysql_server_host:3306/hivedb?createDatabaseIfNotExist=true&useUnicode=true&chara cterEncoding=latin1</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>mysql_username</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mysql_password</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.stats.dbconnectionstring</name>
<value>jdbc:mysql://mysql_server_host:3306/hive_stats?useUnicode=true&characterEncoding=latin1&user=m ysql_username&password=mysql_password&createDatabaseIfNotExist=true</value>
<description>The default connection string for the database that stores temporary hive statistics.</description> </property>
<property>
<name>hive.stats.dbconnectionstring</name>
<value>jdbc:mysql://mysql_server_host:3306/hive_stats?useUnicode=true&characterEncoding=utf8&user=mys ql_username&password=mysql_password&createDatabaseIfNotExist=true</value>
<description>The default connection string for the database that stores temporary hive statistics.</description> </property>
<property>
<name>hive.stats.dbclass</name>
<value>jdbc:mysql</value>
<description>The default database that stores temporary hive statistics.</description>
</property>
<property>
<name>hive.stats.jdbcdriver</name>
<value>com.mysql.jdbc.Driver</value>
<description>The JDBC driver for the database that stores temporary hive statistics.</description>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://127.0.0.1:9083</value>
</property>
添加metastore启动脚本bin/hive-metastore.sh
#!/bin/sh
nohup ./hive --service metastore >> metastore.log 2>&1 &
echo $! > hive-metastore.pid
添加hive server启动脚本bin/hive-server.sh
nohup ./hive --service hiveserver >> hiveserver.log 2>&1 &
echo $! > hive-server.pid
启动metastore和hive server
./hive-metastore.sh
./hive-server.sh
使用客户端连接和测试
参考之前的hive测试步骤一一执行。
如果出现
FAILED: Error in metadata: javax.jdo.JDODataStoreException: Error(s) were found while auto-creating/validating the datastore for classes. The errors are printed in the log, and are attached to this exception.
NestedThrowables:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Specified key was too long; max key length is 1000 bytes
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
或者是
FAILED: Error in metadata: MetaException(message:Got exception: org.apache.thrift.transport.TTransportException null)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
以上错误,主要是在select操作、drop操作时,就会出错。
这样的错误,可以修改hivedb数据库编码:
mysql> alter database hivedb character set latin1;
然后重启hive metastore和hive server就可以了
mysql数据库的编码目前最好设置为latin1,否则使用hive会出现莫名其妙的问题。