hadoop集群部署-笔记

发布时间:2024-09-20

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>http://www.77cn.com.cn</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>http://www.77cn.com.cn.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部署:namenode与jobtracker分离.tasktracker与datanode配对. Trash: hadoop回收站功能默认是禁止的,删除文件,就是直接删除了,所以要记得配置好trash。trash功能还是不错的,当rm后,它会move到当前文件夹下的.Trash目录下,误删文件后,可以到对应的.Trash目录下恢复文件,参考配置属性fs.trash.interval。 备份:namendoe的元数据切记做好多处备份,包括热备和冷备,否则元数据一丢,整个集群的数据都无法恢复了。热备:namenode的元数据配置写两份,一分写本地,另一份写远程nfs。冷备:定时拷贝namenode的元数据到远程的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 记录运行辅助namenode的机器列表 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官网,三个配置文件链接如下:

http://www.77cn.com.cn/common/docs/r0.20.2/core-default.html http://www.77cn.com.cn/common/docs/r0.20.2/hdfs-default.html http://www.77cn.com.cn/common/docs/r0.20.0/mapred-default.html 其中第一个方法找到默认的配置是最好的,因为每个属性都有说明,可以直接使用。

另外,core-site.xml是全局配置,hdfs-site.xml

和mapred-site.xml分别是hdfs和mapred的局部配置。

常用的端口配置

HDFS端口

MR端口

其他端口

参数 dfs.secondary.http.address

描述

secondary NameNode web 管理端口

默认 50090

配置文件 hdfs-site.xml

例子值 0.0.0.0:28680

其他配置参数 dfs.support.append dfs.replication 描述 支持文件 append,主要是支持 hbase 文件复制的副本数,如果创建时不指定这个参数,就使用这个默 认值作为复制的副本数 默认 false 3 配置文件 hdfs-site.xml hdfs-site.xml 例子值 true 2

集群目录配置参数 描述 name node 的元数据,以,号隔开,hdfs 会 http://www.77cn.com.cn.dir 把元数据冗余复制到这些目录,一般这些 {hadoop.tmp.dir} 目录是不同的块设备,不存在的目录会被 忽略掉 node node 的事务文件存储的目录,以,号 http://www.77cn.com.cn.edits.dir 隔开,hdfs 会把事务文件冗余复制到这些 目录,一般这些目录是不同的块设备,不 存在的目录会被忽略掉 secondary NameNode 的元数据以,号 fs.checkpoint.dir 隔开,hdfs 会把元数据冗余复制到这些目 ${hadoop.tmp.dir} 录,一般这些目录是不同的块设备,不存 在的目录会被忽略掉 secondary NameNode 的事务文件存储 fs.checkpoint.edits. dir hadoop.tmp.dir 的目录,以,号隔开,hdfs 会把事务文件冗 余复制到这些目录 /tmp/hadoop-${http://www.77cn.com.cn} core-site.xml /hadoop/tmp/hadoop-${use http://www.77cn.com.cn} ${fs.checkpoint.dir} core-site.xml ${fs.checkpoint.dir} core-site.xml /hadoop/hdfs/nameseconda ry ${http://www.77cn.com.cn.dir} hdfs-site.xm ${http://www.77cn.com.cn.dir} hdfs-site.xm /hadoop/hdfs/name 默认 配置文件 例子值

/dfs/name

/dfs/namesecondary

临时目录,其他临时目录的父目录

data node 的数据目录,以,号隔开,hdfs dfs.data.dir 会把数据存在这些目录下,一般这些目录 ${hadoop.tmp.dir} 是不同的块设备,不存在的目录会被忽略 掉 hdfs-site.xm

/hadoop/hdfs/data1/dat a, /hadoop/hdfs/data2/dat a

/dfs/data

MapReduce 产生的中间数据存放目录, mapred.local.dir 以,号隔开,hdfs 会把数据存在这些目录 下,一般这些目录是不同的块设备,不存 在的目录会被忽略掉

/hadoop/hdfs/data1/map ${hadoop.tmp.dir}mapred-site.xml

red/local, /hadoop/hdfs/data2/map red/local

/mapred/local

${hadoop.tmp.dir}mapred.system.dir MapReduce 的控制文件 mapred-site.xml /hadoop/hdfs/data1/system

/mapred/system

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,

"http://www.77cn.com.cn,http://www.77cn.com.cn,http://www.77cn.com.cn". 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:http://www.77cn.com.cn/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-${http://www.77cn.com.cn} 以上是默认值,暂时不改。

(4)改变 /usr/local/hive的目录所有者为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)启动hive

使用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&amp;useUnicode=true&amp;characterEncoding=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&amp;characterEncoding=latin1&amp;user=mysql_username&amp;password=mysql_password&amp;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&amp;characterEncoding=utf8&amp;user=mysql_username&amp;password=mysql_password&amp;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会出现莫名其妙的问题

hadoop集群部署-笔记.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219