linux配置ssh无密码登录

配置ssh无密码登录,先要安装openssh,如下: 
yum install openssh-clients

准备两台linux服务器或虚拟机,设置两台linux的hosts为:

1 [root@hadoop1 ~]# vim /etc/hosts
2 192.168.1.110 hadoop1
3 192.168.1.111 hadoop2

再按照如下步骤:

01 [root@hadoop1 ~]# ssh-keygen -t rsa
02 Generating public/private rsa key pair.
03 Enter file in which to save the key (/root/.ssh/id_rsa):
04 Created directory '/root/.ssh'.
05 Enter passphrase (empty for no passphrase):
06 Enter same passphrase again:
07 Your identification has been saved in /root/.ssh/id_rsa.
08 Your public key has been saved in /root/.ssh/id_rsa.pub.
09 The key fingerprint is:
10 1e:88:fc:25:83:e4:28:f4:f1:95:ea:7e:78:8f:55:35 root@hadoop1
11 The key's randomart image is:
12 +--[ RSA 2048]----+
13 |                 |
14 |        .        |
15 | . ..  o     E   |
16 |. .=ooo.    . .  |
17 |. ..=o+ S  .     |
18 | .  .. = ..      |
19 |     .o ..       |
20 |    .. oo        |
21 |     .o...       |
22 +-----------------+
23 [root@hadoop1 ~]# cd .ssh/
24 [root@hadoop1 .ssh]# cp id_rsa.pub authorized_keys

另外一台服务器都要做同样的操作

完成上面的操作后,再把hadoop1里的authorized_keys内容,拷到hadoop2的authorized_key里,同样也要将hadoop2里的authorized_keys内容,拷到hadoop1的authorized_key里。

如下所示:

1 [root@hadoop1 .ssh]# cat authorized_keys
2 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqUQBAWIx+zD6YJ478RT5FUTvwpFlu5MQhsXlLjrTdXLpSwCoti4vpV1e7EKy6AS8Scujfu1vaMS5hPIwjScjjFb5iCL7/dklf33ariEFFuLcTQ3BvEfaOZOf88hx/Yn9ysiW+rVeHWqBAYvOSSmhP6HYoYF/as5taLw+95BkilxPhI+SgvUjqLHiJi75qyUHpCCFWMopWPB3PGjOgMNO66ulS7/mnWsUpEV07pwuR2I5HfTTqz693xIXZ1b9l3+0AOTEA5Lyr8QU4BCbylgyadLZsCqtDg8L16voJBXmYA4iAdbJ/+BjKGMNUC15XAS995Bt7FHRlfl4AIbDV6liNw== root@hadoop1
3  
4 [root@hadoop1 .ssh]# vim authorized_keys
5 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqUQBAWIx+zD6YJ478RT5FUTvwpFlu5MQhsXlLjrTdXLpSwCoti4vpV1e7EKy6AS8Scujfu1vaMS5hPIwjScjjFb5iCL7/dklf33ariEFFuLcTQ3BvEfaOZOf88hx/Yn9ysiW+rVeHWqBAYvOSSmhP6HYoYF/as5taLw+95BkilxPhI+SgvUjqLHiJi75qyUHpCCFWMopWPB3PGjOgMNO66ulS7/mnWsUpEV07pwuR2I5HfTTqz693xIXZ1b9l3+0AOTEA5Lyr8QU4BCbylgyadLZsCqtDg8L16voJBXmYA4iAdbJ/+BjKGMNUC15XAS995Bt7FHRlfl4AIbDV6liNw== root@hadoop1
6  
7 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwpYhesi/DlMk2SzIESyGw8LGbV2eB7vD08KxZnKIPScnoc1gGSmLe47CJ7mPxqq4RuGvfZ4bRSRzVdeiybq6EMlOGt5uCb8GT3XMrAzQWuM2kJE3cL7g/BVVyyvQ34Vk9SoWDS0rwMlXYjrT+eUh+Zn+yhhPM+OkLL8/ogmJ0oeN9LIKlYmnxyCrWa4LD9BPc2rvsLEtTSzG3uRvIWOxBrvJmFRIQfE+fNOeruMNm9PYDtix6fdLolS1PLIUzyoxLzh5LWn5CUKUU6J2KH77QswY+4BPHL5p7cwFE3um8WwCKrgeMtao+Grw6FPJ96owmecaU6715RAy0PHyeor3dw== root@hadoop2

这样的就可无密码登录了,如下所示:

1 [root@hadoop1 ~]# scp /work/hadoop/hadoop-0.22.0.tar.gz root@hadoop2:/root
2 hadoop-0.22.0.tar.gz                          100%   69MB  23.0MB/s   00:03   
3

[root@hadoop1 ~]#

Hadoop操作HDFS命令

Hadoop操作HDFS命令如下所示:

hadoop fs 
查看Hadoop HDFS支持的所有命令

hadoop fs –ls 
列出目录及文件信息

hadoop fs –lsr 
循环列出目录、子目录及文件信息

hadoop fs –put test.txt /user/sunlightcs 
将本地文件系统的test.txt复制到HDFS文件系统的/user/sunlightcs目录下

hadoop fs –get /user/sunlightcs/test.txt . 
将HDFS中的test.txt复制到本地文件系统中,与-put命令相反

hadoop fs –cat /user/sunlightcs/test.txt 
查看HDFS文件系统里test.txt的内容

hadoop fs –tail /user/sunlightcs/test.txt 
查看最后1KB的内容

hadoop fs –rm /user/sunlightcs/test.txt 
从HDFS文件系统删除test.txt文件,rm命令也可以删除空目录

hadoop fs –rmr /user/sunlightcs  
删除/user/sunlightcs目录以及所有子目录

hadoop fs –copyFromLocal test.txt /user/sunlightcs/test.txt 
从本地文件系统复制文件到HDFS文件系统,等同于put命令

hadoop fs –copyToLocal /user/sunlightcs/test.txt test.txt 
从HDFS文件系统复制文件到本地文件系统,等同于get命令

hadoop fs –chgrp [-R] /user/sunlightcs 
修改HDFS系统中/user/sunlightcs目录所属群组,选项-R递归执行,跟linux命令一样

hadoop fs –chown [-R] /user/sunlightcs 
修改HDFS系统中/user/sunlightcs目录拥有者,选项-R递归执行

hadoop fs –chmod [-R] MODE /user/sunlightcs 
修改HDFS系统中/user/sunlightcs目录权限,MODE可以为相应权限的3位数或+/-{rwx},选项-R递归执行

hadoop fs –count [-q] PATH 
查看PATH目录下,子目录数、文件数、文件大小、文件名/目录名

hadoop fs –cp SRC [SRC …] DST       
将文件从SRC复制到DST,如果指定了多个SRC,则DST必须为一个目录

hadoop fs –du PATH 
显示该目录中每个文件或目录的大小

hadoop fs –dus PATH 
类似于du,PATH为目录时,会显示该目录的总大小

hadoop fs –expunge  
清空回收站,文件被删除时,它首先会移到临时目录.Trash/中,当超过延迟时间之后,文件才会被永久删除

hadoop fs –getmerge SRC [SRC …] LOCALDST [addnl]      
获取由SRC指定的所有文件,将它们合并为单个文件,并写入本地文件系统中的LOCALDST,选项addnl将在每个文件的末尾处加上一个换行符

hadoop fs –touchz PATH   
创建长度为0的空文件

hadoop fs –test –[ezd] PATH     
对PATH进行如下类型的检查: 
-e PATH是否存在,如果PATH存在,返回0,否则返回1 
-z 文件是否为空,如果长度为0,返回0,否则返回1 
-d 是否为目录,如果PATH为目录,返回0,否则返回1

hadoop fs –text PATH 
显示文件的内容,当文件为文本文件时,等同于cat,文件为压缩格式(gzip以及hadoop的二进制序列文件格式)时,会先解压缩

hadoop fs –help ls 
查看某个[ls]命令的帮助文档

Hadoop配置项整理(core-site.xml)

记录一下Hadoop的配置和说明,用到新的配置项会补充进来,不定期更新。以配置文件名划分

以hadoop 1.x配置为例

core-site.xml

 name value  Description 
 fs.default.name hdfs://hadoopmaster:9000 定义HadoopMaster的URI和端口
 fs.checkpoint.dir /opt/data/hadoop1/hdfs/namesecondary1 定义hadoop的name备份的路径,官方文档说是读取这个,写入dfs.name.dir
 fs.checkpoint.period 1800 定义name备份的备份间隔时间,秒为单位,只对snn生效,默认一小时
 fs.checkpoint.size 33554432 以日志大小间隔做备份间隔,只对snn生效,默认64M
 io.compression.codecs org.apache.hadoop.io.compress.DefaultCodec
com.hadoop.compression.lzo.LzoCodec
com.hadoop.compression.lzo.LzopCodec
org.apache.hadoop.io.compress.GzipCodec
org.apache.hadoop.io.compress.BZip2Codec
(排版调整,实际配置不要回车)
Hadoop所使用的编解码器,gzip和bzip2为自带,lzo需安装hadoopgpl或者kevinweil,逗号分隔,snappy也需要单独安装
 io.compression.codec.lzo.class com.hadoop.compression.lzo.LzoCodec LZO所使用的压缩编码器 
 topology.script.file.name /hadoop/bin/RackAware.py 机架感知脚本位置 
 topology.script.number.args 1000 机架感知脚本管理的主机数,IP地址 
 fs.trash.interval 10800 HDFS垃圾箱设置,可以恢复误删除,分钟数,0为禁用,添加该项无需重启hadoop
 hadoop.http.filter.initializers org.apache.hadoop.security.
AuthenticationFilterInitializer
(排版调整,实际配置不要回车)
需要jobtracker,tasktracker
namenode,datanode等http访问端口用户验证使用,需配置所有节点
 hadoop.http.authentication.type simple | kerberos |  验证方式,默认为简单,也可自己定义class,需配置所有节点
 hadoop.http.authentication.
token.validity
(排版调整,实际配置不要回车)
36000 验证令牌的有效时间,需配置所有节点
 hadoop.http.authentication.
signature.secret
(排版调整,实际配置不要回车)
默认可不写参数 默认不写在hadoop启动时自动生成私密签名,需配置所有节点
hadoop.http.authentication.cookie
.domain
domian.tld http验证所使用的cookie的域名,IP地址访问则该项无效,必须给所有节点都配置域名才可以。
 hadoop.http.authentication.
 simple.anonymous.allowed
(排版调整,实际配置不要回车)
true | false 简单验证专用,默认允许匿名访问,true
 hadoop.http.authentication.
kerberos.principal
(排版调整,实际配置不要回车)
HTTP/localhost@$LOCALHOST Kerberos验证专用,参加认证的实体机必须使用HTTP作为K的Name
 hadoop.http.authentication.
kerberos.keytab
(排版调整,实际配置不要回车)
/home/xianglei/hadoop.keytab Kerberos验证专用,密钥文件存放位置
 hadoop.security.authorization true|false Hadoop服务层级验证安全验证,需配合hadoop-policy.xml使用,配置好以后用dfsadmin,mradmin -refreshServiceAcl刷新生效
 io.file.buffer.size 131072 用作序列化文件处理时读写buffer的大小
 hadoop.security.authentication simple | kerberos hadoop本身的权限验证,非http访问,simple或者kerberos
 hadoop.logfile.size 1000000000 设置日志文件大小,超过则滚动新日志
 hadoop.logfile.count 20 最大日志数
 io.bytes.per.checksum 1024 每校验码所校验的字节数,不要大于io.file.buffer.size
 io.skip.checksum.errors true | false 处理序列化文件时跳过校验码错误,不抛异常。默认false
 io.serializations org.apache.hadoop.io.
serializer.WritableSerialization (排版需要。实际配置不要回车)
序列化的编解码器
 io.seqfile.compress.blocksize 1024000 块压缩的序列化文件的最小块大小,字节
 webinterface.private.actions true | false 设为true,则JT和NN的tracker网页会出现杀任务删文件等操作连接,默认是false

结合Apache手册和公司里用的实际配置编写,实际根据硬件配置的不同,参数大小需做调整,目前参数基于namenode 96G内存,datanode 32G内存。有些har,s3,local这样的fs的implement因为不太会用到,所以没写。

Hadoop配置项整理(mapred-site.xml)

记录一下Hadoop的配置和说明,用到新的配置项会补充进来,不定期更新。以配置文件名划分

以hadoop 1.x配置为例

mapred-site.xml

name  value  Description
hadoop.job.history.location   job历史文件保存路径,无可配置参数,也不用写在配置文件里,默认在logs的history文件夹下。
hadoop.job.history.user.location   用户历史文件存放位置
io.sort.factor 30 这里处理流合并时的文件排序数,我理解为排序时打开的文件数
io.sort.mb 600 排序所使用的内存数量,单位兆,默认1,我记得是不能超过HADOOP_HEAPSIZE设置,否则会OOM
mapred.job.tracker hadoopmaster:9001 连接jobtrack服务器的配置项,默认不写是local,map数1,reduce数1
mapred.job.tracker.http.address 0.0.0.0:50030 jobtracker的tracker页面服务监听地址
mapred.job.tracker.handler.count 15 jobtracker服务的线程数
mapred.task.tracker.report.address 127.0.0.1:0 tasktracker监听的服务器,无需配置,且官方不建议自行修改
mapred.local.dir /data1/hdfs/mapred/local,
/data2/hdfs/mapred/local,
...
mapred做本地计算所使用的文件夹,可以配置多块硬盘,逗号分隔
mapred.system.dir /data1/hdfs/mapred/system,
/data2/hdfs/mapred/system,
...
mapred存放控制文件所使用的文件夹,可配置多块硬盘,逗号分隔。
mapred.temp.dir /data1/hdfs/mapred/temp,
/data2/hdfs/mapred/temp,
...
mapred共享的临时文件夹路径,解释同上。
mapred.local.dir.minspacestart 1073741824 本地运算文件夹剩余空间低于该值则不在本地做计算。字节配置,默认0
mapred.local.dir.minspacekill 1073741824 本地计算文件夹剩余空间低于该值则不再申请新的任务,字节数,默认0
mapred.tasktracker.expiry.interval 60000 TT在这个时间内没有发送心跳,则认为TT已经挂了。单位毫秒
mapred.map.tasks 2 默认每个job所使用的map数,意思是假设设置dfs块大小为64M,需要排序一个60M的文件,也会开启2个map线程,当jobtracker设置为本地是不起作用。
mapred.reduce.tasks 1 解释同上
mapred.jobtracker.restart.recover true | false 重启时开启任务恢复,默认false 
mapred.jobtracker.taskScheduler org.apache.hadoop.mapred.
CapacityTaskScheduler

org.apache.hadoop.mapred.
JobQueueTaskScheduler

org.apache.hadoop.mapred.
FairScheduler
 

重要的东西,开启任务管理器,不设置的话,hadoop默认是FIFO调度器,其他可以使用公平和计算能力调度器
mapred.reduce.parallel.copies 10 reduce在shuffle阶段使用的并行复制数,默认5
mapred.child.java.opts -Xmx2048m 
-Djava.library.path=
/opt/hadoopgpl/native/
Linux-amd64-64
每个TT子进程所使用的虚拟机内存大小
tasktracker.http.threads 50 TT用来跟踪task任务的http server的线程数
mapred.task.tracker.http.address 0.0.0.0:50060 TT默认监听的httpIP和端口,默认可以不写。端口写0则随机使用。
mapred.output.compress true | false 任务结果采用压缩输出,默认false,建议false
mapred.output.compression.codec org.apache.hadoop.io.
compress.DefaultCodec
输出结果所使用的编解码器,也可以用gz或者bzip2或者lzo或者snappy等
mapred.compress.map.output true | false map输出结果在进行网络交换前是否以压缩格式输出,默认false,建议true,可以减小带宽占用,代价是会慢一些。
mapred.map.output.compression.codec com.hadoop.compression.
lzo.LzoCodec
map阶段压缩输出所使用的编解码器
map.sort.class org.apache.hadoop.util.
QuickSort
map输出排序所使用的算法,默认快排。
mapred.hosts conf/mhost.allow 允许连接JT的TT服务器列表,空值全部允许
mapred.hosts.exclude conf/mhost.deny 禁止连接JT的TT列表,节点摘除是很有作用。
mapred.queue.names ETL,rush,default 配合调度器使用的队列名列表,逗号分隔
mapred.tasktracker.map.
tasks.maximum
12 每服务器允许启动的最大map槽位数。
mapred.tasktracker.reduce.
tasks.maximum
6 每服务器允许启动的最大reduce槽位数

捡一些比较重要的,用的多的配置,官网建议的专家配置项基本没写上,改坏了就不好玩了。

Hadoop配置项整理(hdfs-site.xml)

记录一下Hadoop的配置和说明,用到新的配置项会补充进来,不定期更新。以配置文件名划分

以hadoop 1.x配置为例

hdfs-site.xml

 name  value Description 
dfs.default.chunk.view.size 32768 namenode的http访问页面中针对每个文件的内容显示大小,通常无需设置。
dfs.datanode.du.reserved 1073741824 每块磁盘所保留的空间大小,需要设置一些,主要是给非hdfs文件使用,默认是不保留,0字节
dfs.name.dir /opt/data1/hdfs/name,
/opt/data2/hdfs/name,
/nfs/data/hdfs/name
NN所使用的元数据保存,一般建议在nfs上保留一份,作为1.0的HA方案使用,也可以在一台服务器的多块硬盘上使用
dfs.web.ugi nobody,nobody NN,JT等所使用的web tracker页面服务器所使用的用户和组
dfs.permissions true | false dfs权限是否打开,我一般设置false,通过开发工具培训别人界面操作避免误操作,设置为true有时候会遇到数据因为权限访问不了。
dfs.permissions.supergroup supergroup 设置hdfs超级权限的组,默认是supergroup,启动hadoop所使用的用户通常是superuser。
dfs.data.dir /opt/data1/hdfs/data,
/opt/data2/hdfs/data,
/opt/data3/hdfs/data,
...
真正的datanode数据保存路径,可以写多块硬盘,逗号分隔
dfs.datanode.data.dir.perm 755 datanode所使用的本地文件夹的路径权限,默认755
dfs.replication 3 hdfs数据块的复制份数,默认3,理论上份数越多跑数速度越快,但是需要的存储空间也更多。有钱人可以调5或者6
dfs.replication.max 512 有时dn临时故障恢复后会导致数据超过默认备份数。复制份数的最多数,通常没什么用,不用写配置文件里。
dfs.replication.min 1 最小份数,作用同上。
dfs.block.size 134217728 每个文件块的大小,我们用128M,默认是64M。这个计算需要128*1024^2,我碰上过有人直接写128000000,十分浪漫。
dfs.df.interval 60000 磁盘用量统计自动刷新时间,单位是毫秒。
dfs.client.block.write.retries 3 数据块写入的最多重试次数,在此次数之前不会捕获失败。
dfs.heartbeat.interval 3 DN的心跳检测时间间隔。秒
dfs.namenode.handler.count 10 NN启动后展开的线程数。
dfs.balance.bandwidthPerSec 1048576 做balance时所使用的每秒最大带宽,使用字节作为单位,而不是bit
dfs.hosts /opt/hadoop/conf/hosts.allow 一个主机名列表文件,这里的主机是允许连接NN的,必须写绝对路径,文件内容为空则认为全都可以。
dfs.hosts.exclude /opt/hadoop/conf/hosts.deny 基本原理同上,只不过这里放的是禁止访问NN的主机名称列表。这在从集群中摘除DN会比较有用。
dfs.max.objects 0 dfs最大并发对象数,HDFS中的文件,目录块都会被认为是一个对象。0表示不限制
dfs.replication.interval 3 NN计算复制块的内部间隔时间,通常不需写入配置文件。默认就好
dfs.support.append true | false 新的hadoop支持了文件的APPEND操作,这个就是控制是否允许文件APPEND的,但是默认是false,理由是追加还有bug。
dfs.datanode.failed.volumes.tolerated 0 能够导致DN挂掉的坏硬盘最大数,默认0就是只要有1个硬盘坏了,DN就会shutdown。
dfs.secondary.http.address 0.0.0.0:50090 SNN的tracker页面监听地址和端口
dfs.datanode.address 0.0.0.0:50010 DN的服务监听端口,端口为0的话会随机监听端口,通过心跳通知NN
dfs.datanode.http.address 0.0.0.0:50075 DN的tracker页面监听地址和端口
dfs.datanode.ipc.address 0.0.0.0:50020 DN的IPC监听端口,写0的话监听在随机端口通过心跳传输给NN
dfs.datanode.handler.count 3 DN启动的服务线程数
dfs.http.address 0.0.0.0:50070 NN的tracker页面监听地址和端口
dfs.https.enable true | false NN的tracker是否监听在HTTPS协议,默认false
dfs.datanode.https.address 0.0.0.0:50475 DN的HTTPS的tracker页面监听地址和端口
dfs.https.address 0.0.0.0:50470 NN的HTTPS的tracker页面监听地址和端口

  主要配置里会用到的大概就是这些了,还有一些https certfile和一些internal时间配置的,不常用的就不写了。

hadoop安装及配置

hadoop安装及配置,首先要准备3台以上的linux服务器或虚拟机,假设3台服务器的IP地址如下: 
192.168.1.110 
192.168.1.111 
192.168.1.112

设置3台服务器的hostname分别为:hadoop1、hadoop2、hadoop3,并设置hosts为:

1 [root@hadoop1 ~]# vim /etc/hosts
2 192.168.1.110 hadoop1
3 192.168.1.111 hadoop2
4 192.168.1.112 hadoop2

配置ssh无密码登录,参考: http://www.juziku.com/sunlightcs/wiki/5252.htm

下载hadoop-0.20.2.tar.gz,解压后的目录结构如下:

这个是 hadoop-0.20.2.tar.gz的版本,本人装的是hadoop1.0.3的版本,这里就拿hadoop-0.20.2.tar.gz版本进行介绍了:

01 [root@hadoop1 hadoop-0.20.2]# pwd
02 /work/hadoop/hadoop-0.20.2
03 [root@hadoop1 hadoop-0.20.2]# ll
04 总用量 4876
05 drwxr-xr-x.  2 root root    4096 12月 27 21:44 bin
06 -rw-rw-r--.  1 root root   74035 2月  19 2010 build.xml
07 drwxr-xr-x.  4 root root    4096 2月  19 2010 c++
08 -rw-rw-r--.  1 root root  348624 2月  19 2010 CHANGES.txt
09 drwxr-xr-x.  2 root root    4096 12月 27 21:51 conf
10 drwxr-xr-x. 13 root root    4096 2月  19 2010 contrib
11 drwxr-xr-x.  7 root root    4096 12月 27 21:44 docs
12 -rw-rw-r--.  1 root root    6839 2月  19 2010 hadoop-0.20.2-ant.jar
13 -rw-rw-r--.  1 root root 2689741 2月  19 2010 hadoop-0.20.2-core.jar
14 -rw-rw-r--.  1 root root  142466 2月  19 2010 hadoop-0.20.2-examples.jar
15 -rw-rw-r--.  1 root root 1563859 2月  19 2010 hadoop-0.20.2-test.jar
16 -rw-rw-r--.  1 root root   69940 2月  19 2010 hadoop-0.20.2-tools.jar
17 drwxr-xr-x.  2 root root    4096 12月 27 21:44 ivy
18 -rw-rw-r--.  1 root root    8852 2月  19 2010 ivy.xml
19 drwxr-xr-x.  5 root root    4096 12月 27 21:44 lib
20 drwxr-xr-x.  2 root root    4096 12月 27 21:44 librecordio
21 -rw-rw-r--.  1 root root   13366 2月  19 2010 LICENSE.txt
22 drwxr-xr-x.  3 root root    4096 12月 27 22:10 logs
23 -rw-rw-r--.  1 root root     101 2月  19 2010 NOTICE.txt
24 -rw-rw-r--.  1 root root    1366 2月  19 2010 README.txt
25 drwxr-xr-x. 15 root root    4096 12月 27 21:44 src
26 drwxr-xr-x.  8 root root    4096 2月  19 2010 webapps

修改vim /work/hadoop/hadoop-0.20.2/conf/hadoop-env.sh  
把JAVA_HOME前面的#去掉,并设置JDK路径,如下:(若没JDK,则需要先安装JDK) 
export JAVA_HOME=/root/tool/jdk1.6.0_31

修改core-site.xml  mapred-site.xml  hdfs-site.xml  masters slaves文件,如下所示:

01 [root@hadoop1 conf]# pwd
02 /work/hadoop/hadoop-0.20.2/conf
03 [root@hadoop1 conf]# vim hdfs-site.xml
04 <?xml version="1.0"?>
05 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
06 <configuration>
07 <property>
08 <name>dfs.replication</name>
09 <value>2</value>
10 </property>
11 </configuration>
12   
13 [root@hadoop1 conf]# vim mapred-site.xml
14 <?xml version="1.0"?>
15 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
16 <configuration>
17 <property>
18 <name>mapred.job.tracker</name>
19 <value>hadoop1:9001</value>
20 </property>
21 </configuration>
22   
23 [root@hadoop1 conf]# vim core-site.xml
24 <?xml version="1.0"?>
25 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
26 <configuration>
27 <property>
28 <name>fs.default.name</name>
29 <value>hdfs://hadoop1:9000</value>
30 </property>
31 </configuration>
32   
33 [root@hadoop1 conf]# vim masters
34 hadoop1
35   
36 [root@hadoop1 conf]# vim slaves
37 hadoop2
38 hadoop3

再把hadoop1上配置的hadoop复制到hadoop2、hadoop3机器上

1 [root@hadoop1 conf]# scp -r /work/hadoop/hadoop-0.20.2 root@hadoop2:/work/hadoop
2 [root@hadoop1 conf]# scp -r /work/hadoop/hadoop-0.20.2 root@hadoop3:/work/hadoop

格式化hadoop1上的namenode,不用格式化hadoop2及hadoop3

01 [root@hadoop1 hadoop-0.20.2]# bin/hadoop namenode -format
02 12/12/27 22:10:13 INFO namenode.NameNode: STARTUP_MSG:
03 /************************************************************
04 STARTUP_MSG: Starting NameNode
05 STARTUP_MSG:   host = hadoop1/192.168.1.110
06 STARTUP_MSG:   args = [-format]
07 STARTUP_MSG:   version = 0.20.2
08 STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010
09 ************************************************************/
10 12/12/27 22:10:13 INFO namenode.FSNamesystem: fsOwner=root,root
11 12/12/27 22:10:13 INFO namenode.FSNamesystem: supergroup=supergroup
12 12/12/27 22:10:13 INFO namenode.FSNamesystem: isPermissionEnabled=true
13 12/12/27 22:10:13 INFO common.Storage: Image file of size 94 saved in 0 seconds.
14 12/12/27 22:10:13 INFO common.Storage: Storage directory /tmp/hadoop-root/dfs/name has been successfully formatted.
15 12/12/27 22:10:13 INFO namenode.NameNode: SHUTDOWN_MSG:
16 /************************************************************
17 SHUTDOWN_MSG: Shutting down NameNode at hadoop1/192.168.1.110
18 ************************************************************/

再启动hadoop服务,只需启动hadoop1即可,会自动启动hadoop2及hadoop3,如下所示:

01 [root@hadoop1 hadoop-0.20.2]# bin/start-all.sh
02 namenode running as process 1290. Stop it first.
03  
04 hadoop3: starting datanode, logging to /work/hadoop/hadoop-0.20.2/bin/../logs/hadoop-root-datanode-hadoop3.out
05 hadoop2: starting datanode, logging to /work/hadoop/hadoop-0.20.2/bin/../logs/hadoop-root-datanode-hadoop2.out
06 hadoop1: secondarynamenode running as process 1425. Stop it first.
07 jobtracker running as process 1489. Stop it first.
08 hadoop2: starting tasktracker, logging to /work/hadoop/hadoop-0.20.2/bin/../logs/hadoop-root-tasktracker-hadoop2.out
09 hadoop3: starting tasktracker, logging to /work/hadoop/hadoop-0.20.2/bin/../logs/hadoop-root-tasktracker-hadoop3.out
10 [root@hadoop1 hadoop-0.20.2]# jps
11 1290 NameNode
12 1776 Jps
13 1425 SecondaryNameNode
14 1489 JobTracker

完成以上步骤,就完成hadoop-0.20.2的安装,hadoop1.x的安装步骤也是一样的。

注:测试环境下,可先关闭防火墙,不然会出问题。 
service iptables stop

通过Hadoop API操作Hadoop的HDFS文件系统,这里使用的是hadoop1.0.4,具体步骤如下:

通过API操作Hadoop例子

在eclipse中新建Java项目,把hadoop里jar包导入工程里,并把core-site.xml文件拷到resources目录里:

core-site.xml文件内容如下所示:

01 <?xml version="1.0"?>
02 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
03  
04 <configuration>
05     <property>
06         <name>fs.default.name</name>
07         <!-- 填写hadoop的IP地址   也可以在hosts中指定,如下所示 -->
08         <value>hdfs://hadoop1:9000</value>
09     </property>
10 </configuration>

操作HDFS文件系统代码如下所示:

01 package com.juziku;
02  
03 import java.io.IOException;
04  
05 import org.apache.hadoop.conf.Configuration;
06 import org.apache.hadoop.fs.FSDataOutputStream;
07 import org.apache.hadoop.fs.FileSystem;
08 import org.apache.hadoop.fs.Path;
09  
10 /**
11  * Hadoop1.x  测试HDFS API简单使用
12  *
13  * @author sunlightcs
14  * @date   2013-1-25 下午3:55:05
15  * http://www.juziku.com/sunlightcs/
16  */
17 public class CreatFile {
18     private static Configuration conf = new Configuration();
19      
20     /**
21      * 创建空文件
22      * @param path   文件路径
23      */
24     public static void createFile(String path) throws IOException{
25         FileSystem fs = FileSystem.get(conf);
26         fs.createNewFile(new Path(path));
27          
28         fs.close();
29     }
30      
31     /**
32      * 创建文件     有内容
33      * @param path  文件路径
34      */
35     public static void createFile(String path, String content)throws IOException{
36         FileSystem fs = FileSystem.get(conf);
37         FSDataOutputStream output = fs.create(new Path(path));
38         output.writeUTF(content);
39         output.close();
40         fs.close();
41     }
42      
43     /**
44      * 创建目录
45      * @param dir  目录路径
46      */
47     public static void createDir(String dir) throws IOException{
48         FileSystem fs = FileSystem.get(conf);
49         fs.mkdirs(new Path(dir));
50         fs.close();
51     }
52      
53      
54     public static void main(String[] args) throws IOException {
55         createFile("/com/juziku/test1.txt");
56         createFile("/com/juziku/test2.txt", "测试数据。。。");
57         createDir("/com/juziku/test/test");
58     }
59 }

注:设置hadoop文件系统权限,不然会报错

1 [root@hadoop1 bin]# ./hadoop fs -chmod -R 777 /

执行上面代码后,查看hadoop文件系统目录:

1 [root@hadoop1 bin]# ./hadoop fs -lsr /com/juziku/
2 drwxrwxrwx   - Administrator supergroup          0 2013-01-25 15:53 /com/juziku/test
3 drwxr-xr-x   - Administrator supergroup          0 2013-01-25 15:53 /com/juziku/test/test
4 -rw-r--r--   3 Administrator supergroup          0 2013-01-25 15:45 /com/juziku/test1.txt
5 -rw-r--r--   3 Administrator supergroup         23 2013-01-25 15:52 /com/juziku/test2.txt
6 [root@hadoop1 bin]# ./hadoop fs -cat /com/juziku/test2.txt
7 测试数据。。。

Hadoop校验和的检验

客户端上传数据或DataNode从其他DataNode上接收数据时,都会检查校验和,把真实数据的校验和同datanode上的校验和进行比较。

每创建一个文件filename.txt时,就会在同目录下创建.filename.txt.crc检验和文件,默认情况下,每512个字节就会生成一个32位的校验和,可以在core-site.xml文件中修改默认值:

1 <property>
2     <name>io.bytes.per.checksum</name>
3     <value>512</value>
4 </property>

也可以禁止Hadoop校验和检验:

1 <property>
2         <name>fs.file.impl</name>
3     <value>org.apache.hadoop.fs.RawLocalFileSystem</value>
4 </property>

或者如下:

1 FileSystem fs = new RawLocalFileSystem();
2 fs.initialize(null, conf);

Hive安装及配置

Hive安装及配置,准备工作:

1).安装JDK1.6

2).安装Hadoop-1.0.4

3).安装MySQL5.x

上面都安装好后,接下来就可以安装Hive了,目前最新版本为hive0.10.0,从hive0.8.0开始,就支持hadoop1.x了,这里安装的是hive0.8.1,具体步骤如下:

1.下载hive-0.8.1.tar.gz

下载地址:wget http://mirrors.cnnic.cn/apache/hive/hive-0.8.1/hive-0.8.1.tar.gz

2.解压到/work/hive目录下,如下所示:

01 [root@hadoop1 hive]# tar zxf hive-0.8.1.tar.gz
02 [root@hadoop1 hive]# cd hive-0.8.1
03 [root@hadoop1 hive-0.8.1]# ll
04 总用量 132
05 drwxr-xr-x.  3 root root  4096 1月  26 2012 bin
06 drwxr-xr-x.  2 root root  4096 2月  17 15:13 conf
07 drwxr-xr-x.  6 root root  4096 2月  17 14:41 docs
08 drwxr-xr-x.  5 root root  4096 1月  26 2012 examples
09 drwxr-xr-x.  4 root root  4096 2月  17 14:41 lib
10 -rw-rw-r--.  1 root root 23208 1月  26 2012 LICENSE
11 -rw-rw-r--.  1 root root   897 1月  26 2012 NOTICE
12 -rw-rw-r--.  1 root root  4439 1月  26 2012 README.txt
13 -rw-rw-r--.  1 root root 66301 1月  26 2012 RELEASE_NOTES.txt
14 drwxr-xr-x.  4 root root  4096 1月  26 2012 scripts
15 drwxr-xr-x. 27 root root  4096 2月  17 14:41 src
16 [root@hadoop1 hive-0.8.1]# pwd
17 /work/hive/hive-0.8.1

3.配置Hive的环境变量,在/etc/profile文件末尾添加如下内容:
export HIVE_HOME=/work/hive/hive-0.8.1
export PATH=$HIVE_HOME/bin:$PATH

再执行source /etc/profile

4.拷贝hive的配置模板文件,如下所示:

01 [root@hadoop1 hive-0.8.1]# cd conf/
02 [root@hadoop1 conf]# cp hive-env.sh.template hive-env.sh
03 [root@hadoop1 conf]# cp hive-default.xml.template hive-site.xml
04 [root@hadoop1 conf]# ll
05 总用量 112
06 -rw-rw-r--. 1 root root 46817 1月  26 2012 hive-default.xml.template
07 -rw-r--r--. 1 root root  1621 2月  17 15:01 hive-env.sh
08 -rw-rw-r--. 1 root root  1593 1月  26 2012 hive-env.sh.template
09 -rw-rw-r--. 1 root root  1637 1月  26 2012 hive-exec-log4j.properties.template
10 -rw-rw-r--. 1 root root  2043 1月  26 2012 hive-log4j.properties.template
11 -rw-r--r--. 1 root root 46790 2月  17 15:31 hive-site.xml

5.修改hive-env.sh文件,指定HADOOP_HOME及HIVE_CONF_DIR的路径如下: 
HADOOP_HOME=/work/hadoop/hadoop-1.0.4 
export HIVE_CONF_DIR=/work/hive/hive-0.8.1/conf

6.修改hive-site.xml文件,指定MySQL数据库驱动、数据库名、用户名及密码,修改的内容如下所示:

01 <property>
02   <name>javax.jdo.option.ConnectionURL</name>
03   <value>jdbc:mysql://localhost:3306/hive</value>
04   <description>JDBC connect string for a JDBC metastore</description>
05 </property>
06 <property>
07   <name>javax.jdo.option.ConnectionDriverName</name>
08   <value>com.mysql.jdbc.Driver</value>
09   <description>Driver class name for a JDBC metastore</description>
10 </property>
11 <property>
12   <name>javax.jdo.option.ConnectionUserName</name>
13   <value>root</value>
14   <description>username to use against metastore database</description>
15 </property>
16 <property>
17   <name>javax.jdo.option.ConnectionPassword</name>
18   <value>123456</value>
19   <description>password to use against metastore database</description>
20 </property>

7.拷贝MySQL驱动mysql-connector-java-5.1.18.jar到hive-0.8.1/lib目录中,可从附件里下载

8.在HDFS中创建/tmp和/user/hive/warehouse并设置权限

1 [root@hadoop1 bin]# pwd
2 /work/hadoop/hadoop-1.0.4/bin
3 [root@hadoop1 bin]# ./hadoop fs -mkdir /tmp
4 [root@hadoop1 bin]# ./hadoop fs -mkdir /user/hive/warehouse
5 [root@hadoop1 bin]# ./hadoop fs -chmod g+w /tmp
6 [root@hadoop1 bin]# ./hadoop fs -chmod g+w /user/hive/warehouse

9.测试Hive是否安装成功,如下所示:

01 [root@hadoop1 bin]# hive
02 WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files.
03 Logging initialized using configuration in jar:file:/work/hive/hive-0.8.1/lib/hive-common-0.8.1.jar!/hive-log4j.properties
04 Hive history file=/tmp/root/hive_job_log_root_201302171656_1326720941.txt
05 hive> create table user(id int,name string);
06 OK
07 Time taken: 3.242 seconds
08 hive> select * from user;
09 OK
10 Time taken: 0.275 seconds
11 hive> exit;
12 [root@hadoop1 bin]#

看到上面结果后,证明Hive可以正常工作了

这里我们可以用一个跟强大一点的分布式数据库,hbase来进行检验

Hadoop里MapReduce实现单词数统计

Hadoop操作MapReduce实现单词统计,代码如下:

01 package com.juziku;
02  
03 import java.io.IOException;
04  
05 import org.apache.hadoop.io.IntWritable;
06 import org.apache.hadoop.io.LongWritable;
07 import org.apache.hadoop.io.Text;
08 import org.apache.hadoop.mapred.MapReduceBase;
09 import org.apache.hadoop.mapred.Mapper;
10 import org.apache.hadoop.mapred.OutputCollector;
11 import org.apache.hadoop.mapred.Reporter;
12  
13 /**
14  * Hadoop Mapper写法
15  *
16  * @author sunlightcs
17  * @date   2013-1-29 下午3:21:30
18  * http://www.juziku.com/sunlightcs/
19  */
20 public class WordCountMapper extends MapReduceBase implements
21         Mapper<LongWritable, Text, Text, IntWritable> {
22      
23     Text key = new Text();
24     IntWritable value = new IntWritable(1);
25     @Override
26     public void map(LongWritable arg0, Text arg1,
27             OutputCollector<Text, IntWritable> arg2, Reporter arg3)
28             throws IOException {
29          
30         String lines[] = arg1.toString().split("\\W+");
31         for(String line : lines){
32             key.set(line);
33             arg2.collect(key, value);
34         }
35     }
36  
37 }
01 package com.juziku;
02  
03 import java.io.IOException;
04 import java.util.Iterator;
05  
06 import org.apache.hadoop.io.IntWritable;
07 import org.apache.hadoop.io.Text;
08 import org.apache.hadoop.mapred.MapReduceBase;
09 import org.apache.hadoop.mapred.OutputCollector;
10 import org.apache.hadoop.mapred.Reducer;
11 import org.apache.hadoop.mapred.Reporter;
12  
13 /**
14  * Hadoop Reduce写法
15  *
16  * @author sunlightcs
17  * @date   2013-1-29 下午3:35:51
18  * http://www.juziku.com/sunlightcs/
19  */
20 public class WordCountReduce extends MapReduceBase implements
21         Reducer<Text, IntWritable, Text, IntWritable> {
22     IntWritable value = new IntWritable();
23     @Override
24     public void reduce(Text arg0, Iterator<IntWritable> arg1,
25             OutputCollector<Text, IntWritable> arg2, Reporter arg3)
26             throws IOException {
27         int sum = 0;
28         while(arg1.hasNext()){
29             sum += arg1.next().get();
30         }
31         value.set(sum);
32         arg2.collect(arg0, value);
33     }
34  
35 }
01 package com.juziku;
02  
03 import org.apache.hadoop.conf.Configured;
04 import org.apache.hadoop.fs.Path;
05 import org.apache.hadoop.io.IntWritable;
06 import org.apache.hadoop.io.Text;
07 import org.apache.hadoop.mapred.FileInputFormat;
08 import org.apache.hadoop.mapred.FileOutputFormat;
09 import org.apache.hadoop.mapred.JobClient;
10 import org.apache.hadoop.mapred.JobConf;
11 import org.apache.hadoop.util.Tool;
12 import org.apache.hadoop.util.ToolRunner;
13  
14  
15 /**
16  * 计算多个文件里,单词出现的次数
17  *
18  * @author sunlightcs
19  * @date   2013-1-29 下午3:40:34
20  * http://www.juziku.com/sunlightcs/
21  */
22 public class MapReduceTest extends Configured implements Tool{
23  
24     @Override
25     public int run(String[] arg0) throws Exception {
26         JobConf conf = new JobConf(getConf(), MapReduceTest.class);
27         //设置hadoop job的名字
28         conf.setJobName("WordCount");
29          
30         //设置输出KEY的类型为Text
31         conf.setOutputKeyClass(Text.class);
32         //设置输出Value的类型为IntWritable
33         conf.setOutputValueClass(IntWritable.class);
34          
35         //设置Mapper对应的类
36         conf.setMapperClass(WordCountMapper.class);
37         //设置Reduce对应的类
38         conf.setReducerClass(WordCountReduce.class);
39          
40         //设置输入的路径   预先通过put,拷几个文件到HDFS下的/com/juziku/testdata
41         FileInputFormat.setInputPaths(conf, newPath("/com/juziku/testdata"));
42         //设置输出的路径
43         FileOutputFormat.setOutputPath(conf, newPath("/output/testdata"));
44          
45         JobClient.runJob(conf);
46         return 0;
47     }
48  
49     public static void main(String[] args) throws Exception {
50         int status = ToolRunner.run(new MapReduceTest(), args);
51         System.exit(status);
52     }
53      
54 }

把上面的代码打成jar包,并指定Main class为com.juziku.MapReduceTest,再执行如下命令:

01 [root@hadoop1 bin]# pwd
02 /work/hadoop/hadoop-1.0.4/bin
03 [root@hadoop1 bin]# ./start-all.sh
04 starting namenode, logging to /work/hadoop/hadoop-1.0.4/libexec/../logs/hadoop-root-namenode-hadoop1.out
05 hadoop2: starting datanode, logging to /work/hadoop/hadoop-1.0.4/libexec/../logs/hadoop-root-datanode-hadoop2.out
06 hadoop3: starting datanode, logging to /work/hadoop/hadoop-1.0.4/libexec/../logs/hadoop-root-datanode-hadoop3.out
07 hadoop1: starting secondarynamenode, logging to /work/hadoop/hadoop-1.0.4/libexec/../logs/hadoop-root-secondarynamenode-hadoop1.out
08 starting jobtracker, logging to /work/hadoop/hadoop-1.0.4/libexec/../logs/hadoop-root-jobtracker-hadoop1.out
09 hadoop2: starting tasktracker, logging to /work/hadoop/hadoop-1.0.4/libexec/../logs/hadoop-root-tasktracker-hadoop2.out
10 hadoop3: starting tasktracker, logging to /work/hadoop/hadoop-1.0.4/libexec/../logs/hadoop-root-tasktracker-hadoop3.out
11 [root@hadoop1 bin]# ./hadoop fs -lsr /com/juziku
12 drwxr-xr-x   - root supergroup          0 2013-01-28 18:00 /com/juziku/testdata
13 -rw-r--r--   2 root supergroup         22 2013-01-28 18:00 /com/juziku/testdata/test1.txt
14 -rw-r--r--   2 root supergroup         22 2013-01-28 18:00 /com/juziku/testdata/test2.txt
15 [root@hadoop1 bin]# ./hadoop fs -cat /com/juziku/testdata/test1.txt
16 hello world in hadoop
17 [root@hadoop1 bin]# ./hadoop fs -cat /com/juziku/testdata/test2.txt
18 hello world in juziku
19 [root@hadoop1 bin]# ./hadoop jar ../hadoop2.jar
20 13/01/29 16:12:31 INFO util.NativeCodeLoader: Loaded the native-hadoop library
21 13/01/29 16:12:31 WARN snappy.LoadSnappy: Snappy native library not loaded
22 13/01/29 16:12:31 INFO mapred.FileInputFormat: Total input paths to process : 2
23 13/01/29 16:12:32 INFO mapred.JobClient: Running job: job_201301291609_0001
24 13/01/29 16:12:33 INFO mapred.JobClient:  map 0% reduce 0%
25 13/01/29 16:12:47 INFO mapred.JobClient:  map 50% reduce 0%
26 13/01/29 16:12:53 INFO mapred.JobClient:  map 100% reduce 0%
27 13/01/29 16:12:59 INFO mapred.JobClient:  map 100% reduce 100%
28 13/01/29 16:13:04 INFO mapred.JobClient: Job complete: job_201301291609_0001
29 13/01/29 16:13:04 INFO mapred.JobClient: Counters: 30
30 13/01/29 16:13:04 INFO mapred.JobClient:   Job Counters
31 13/01/29 16:13:04 INFO mapred.JobClient:     Launched reduce tasks=1
32 13/01/29 16:13:04 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=18013
33 13/01/29 16:13:04 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
34 13/01/29 16:13:04 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
35 13/01/29 16:13:04 INFO mapred.JobClient:     Launched map tasks=2
36 13/01/29 16:13:04 INFO mapred.JobClient:     Data-local map tasks=2
37 13/01/29 16:13:04 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=10619
38 13/01/29 16:13:04 INFO mapred.JobClient:   File Input Format Counters
39 13/01/29 16:13:04 INFO mapred.JobClient:     Bytes Read=44
40 13/01/29 16:13:04 INFO mapred.JobClient:   File Output Format Counters
41 13/01/29 16:13:04 INFO mapred.JobClient:     Bytes Written=39
42 13/01/29 16:13:04 INFO mapred.JobClient:   FileSystemCounters
43 13/01/29 16:13:04 INFO mapred.JobClient:     FILE_BYTES_READ=98
44 13/01/29 16:13:04 INFO mapred.JobClient:     HDFS_BYTES_READ=248
45 13/01/29 16:13:04 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=64080
46 13/01/29 16:13:04 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=39
47 13/01/29 16:13:04 INFO mapred.JobClient:   Map-Reduce Framework
48 13/01/29 16:13:04 INFO mapred.JobClient:     Map output materialized bytes=104
49 13/01/29 16:13:04 INFO mapred.JobClient:     Map input records=2
50 13/01/29 16:13:04 INFO mapred.JobClient:     Reduce shuffle bytes=104
51 13/01/29 16:13:04 INFO mapred.JobClient:     Spilled Records=16
52 13/01/29 16:13:04 INFO mapred.JobClient:     Map output bytes=76
53 13/01/29 16:13:04 INFO mapred.JobClient:     Total committed heap usage (bytes)=336994304
54 13/01/29 16:13:04 INFO mapred.JobClient:     CPU time spent (ms)=2340
55 13/01/29 16:13:04 INFO mapred.JobClient:     Map input bytes=44
56 13/01/29 16:13:04 INFO mapred.JobClient:     SPLIT_RAW_BYTES=204
57 13/01/29 16:13:04 INFO mapred.JobClient:     Combine input records=0
58 13/01/29 16:13:04 INFO mapred.JobClient:     Reduce input records=8
59 13/01/29 16:13:04 INFO mapred.JobClient:     Reduce input groups=5
60 13/01/29 16:13:04 INFO mapred.JobClient:     Combine output records=0
61 13/01/29 16:13:04 INFO mapred.JobClient:     Physical memory (bytes) snapshot=331780096
62 13/01/29 16:13:04 INFO mapred.JobClient:     Reduce output records=5
63 13/01/29 16:13:04 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=1146478592
64 13/01/29 16:13:04 INFO mapred.JobClient:     Map output records=8
65 0
66 [root@hadoop1 bin]# ./hadoop fs -lsr /output
67 drwxrwxrwx   - root supergroup          0 2013-01-29 16:13 /output/testdata
68 -rw-r--r--   2 root supergroup          0 2013-01-29 16:13 /output/testdata/_SUCCESS
69 drwxrwxrwx   - root supergroup          0 2013-01-29 16:12 /output/testdata/_logs
70 drwxrwxrwx   - root supergroup          0 2013-01-29 16:12 /output/testdata/_logs/history
71 -rw-r--r--   2 root supergroup      16271 2013-01-29 16:12 /output/testdata/_logs/history/job_201301291609_0001_1359447152308_root_WordCount
72 -rw-r--r--   2 root supergroup      20061 2013-01-29 16:12 /output/testdata/_logs/history/job_201301291609_0001_conf.xml
73 -rw-r--r--   2 root supergroup         39 2013-01-29 16:12 /output/testdata/part-00000
74 [root@hadoop1 bin]# ./hadoop fs -cat /output/testdata/part-00000
75 hadoop  1
76 hello   2
77 in      2
78 juziku  1
79 world   2
80 [root@hadoop1 bin]#

HBase完全分布模式安装

下载hbase-0.94.5.tar.gz,并解压到/work/hbase目录下,如下所示:

1 [root@hadoop1 hbase]# wget http://labs.mop.com/apache-mirror/hbase/hbase-0.94.5/hbase-0.94.5.tar.gz
2 [root@hadoop1 hbase]# tar zxf hbase-0.94.5.tar.gz
3 [root@hadoop1 hbase]# ll
4 总用量 47844
5 drwxr-xr-x. 11 1002 1002     4096 2月  19 17:20 hbase-0.94.5
6 -rw-r--r--.  1 root root 48988151 2月  19 15:48 hbase-0.94.5.tar.gz

下载zookeeper-3.4.5.tar.gz,并解压到/work/zookeeper目录下,如下所示:

1 [root@hadoop1 zookeeper]# wget http://labs.mop.com/apache-mirror/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz
2 [root@hadoop1 zookeeper]# tar zxf zookeeper-3.4.5.tar.gz
3 [root@hadoop1 zookeeper]# ll
4 总用量 16024
5 drwxr-xr-x. 10  501 games     4096 11月  5 16:04 zookeeper-3.4.5
6 -rw-r--r--.  1 root root  16402010 2月  19 15:49 zookeeper-3.4.5.tar.gz

修改hbase-site.xml配置文件,如下:

01 [root@hadoop1 conf]# pwd
02 /work/hbase/hbase-0.94.5/conf
03 [root@hadoop1 conf]# vim hbase-site.xml
04  
05 <?xml version="1.0"?>
06 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
07 <configuration>
08         <property>
09                 <name>hbase.rootdir</name>
10                 <value>hdfs://hadoop1:9000/hbase</value>
11                 <description>The directory shared by RegionServers.</description>
12         </property>
13         <property>
14                 <name>hbase.cluster.distributed</name>
15                 <value>true</value>
16         </property>
17         <property>
18                 <name>hbase.master</name>
19                 <value>hadoop1:60000</value>
20         </property>
21         <property>
22                  <name>hbase.zookeeper.quorum</name>
23                  <value>hadoop1,hadoop2,hadoop3</value>
24          </property>
25 </configuration>

其中:hadoop1、hadoop2、hadoop3需在/etc/hosts里配置,如下所示:

1 [root@hadoop1 conf]# cat /etc/hosts
2 192.168.1.110 hadoop1
3 192.168.1.111 hadoop2
4 192.168.1.112 hadoop3

把hbase集群的机器添加到conf/regionservers文件里,由于hbase安装在hadoop1、hadoop2、hadoop3里,则如下所示:

1 [root@hadoop1 conf]# pwd
2 /work/hbase/hbase-0.94.5/conf
3 [root@hadoop1 conf]# vim regionservers
4 hadoop1
5 hadoop2
6 hadoop3

修改hbase-env.sh文件, 改动内容如下:

1 [root@hadoop1 conf]# pwd
2 /work/hbase/hbase-0.94.5/conf
3 [root@hadoop1 conf]# vim hbase-env.sh
4 export JAVA_HOME=/root/tool/jdk1.6.0_31
5 export HBASE_MANAGES_ZK=true
6 #true:表示zookeeper交给hbase管理,启动hbase时,会自动启动hbase-site.xml里的hbase.zookeeper.quorum属性中的所有zookeeper实例
7 #false:表示启动hbase时,要手动启动所有zookeeper实例

配置zookeeper,如下所示:

01 [root@hadoop1 conf]# pwd
02 /work/zookeeper/zookeeper-3.4.5/conf
03 [root@hadoop1 conf]# cp zoo_sample.cfg zoo.cfg
04 [root@hadoop1 conf]# vim zoo.cfg
05 # The number of milliseconds of each tick
06 tickTime=2000
07 # The number of ticks that the initial
08 # synchronization phase can take
09 initLimit=10
10 # The number of ticks that can pass between
11 # sending a request and getting an acknowledgement
12 syncLimit=5
13 # the directory where the snapshot is stored.
14 # do not use /tmp for storage, /tmp here is just
15 # example sakes.
16 dataDir=$HADOOP_HOME/zookeeper-3.4.5/data
17 # the port at which the clients will connect
18 clientPort=2181
19 #
20 # Be sure to read the maintenance section of the
21 # administrator guide before turning on autopurge.
22 #
23 # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
24 #
25 # The number of snapshots to retain in dataDir
26 #autopurge.snapRetainCount=3
27 # Purge task interval in hours
28 # Set to "0" to disable auto purge feature
29 #autopurge.purgeInterval=1
30  
31 server.1=hadoop1:2888:3888
32 server.2=hadoop2:2888:3888
33 server.3=hadoop3:2888:3888

配置环境变量,如下:

01 [root@hadoop1 conf]# vim /etc/profile
02 export JAVA_HOME=/root/tool/jdk1.6.0_31
03  
04 export HADOOP_HOME=/work/hadoop/hadoop-1.0.4
05 export HIVE_HOME=/work/hive/hive-0.8.1
06 export HBASE_HOME=/work/hbase/hbase-0.94.5
07  
08 export JRE_HOME=$JAVA_HOME/jre
09 export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
10 exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$HBASE_HOME/bin:$PATH

再把hbase、zookeeper拷贝到hadoop2/hadoop3机器上,如下:

1 [root@hadoop1 work]# scp -r hbase root@hadoop2:/work
2 [root@hadoop1 work]# scp -r hbase root@hadoop3:/work
3 [root@hadoop1 work]# scp -r zookeeper root@hadoop2:/work
4 [root@hadoop1 work]# scp -r zookeeper root@hadoop3:/work

接下来,就可以测试了,先启动hadoop,再启动hbase,如下:

01 [root@hadoop1 bin]# jps
02 3879 Jps
03 [root@hadoop1 bin]# pwd
04 /work/hadoop/hadoop-1.0.4/bin
05 [root@hadoop1 bin]# ./start-all.sh
06 [root@hadoop1 bin]# jps
07 4114 SecondaryNameNode
08 4196 JobTracker
09 3947 NameNode
10 4290 Jps
11 [root@hadoop1 bin]# cd /work/hbase/hbase-0.94.5/bin
12 [root@hadoop1 bin]# ./start-hbase.sh
13 hadoop3: starting zookeeper, logging to /work/hbase/hbase-0.94.5/bin/../logs/hbase-root-zookeeper-hadoop3.out
14 hadoop2: starting zookeeper, logging to /work/hbase/hbase-0.94.5/bin/../logs/hbase-root-zookeeper-hadoop2.out
15 hadoop1: starting zookeeper, logging to /work/hbase/hbase-0.94.5/bin/../logs/hbase-root-zookeeper-hadoop1.out
16 starting master, logging to /work/hbase/hbase-0.94.5/logs/hbase-root-master-hadoop1.out
17 hadoop2: starting regionserver, logging to /work/hbase/hbase-0.94.5/bin/../logs/hbase-root-regionserver-hadoop2.out
18 hadoop3: starting regionserver, logging to /work/hbase/hbase-0.94.5/bin/../logs/hbase-root-regionserver-hadoop3.out
19 hadoop1: starting regionserver, logging to /work/hbase/hbase-0.94.5/bin/../logs/hbase-root-regionserver-hadoop1.out
20 [root@hadoop1 bin]# jps
21 4575 HQuorumPeer
22 4114 SecondaryNameNode
23 4196 JobTracker
24 3947 NameNode
25 4637 HMaster
26 4790 HRegionServer
27 4893 Jps
28 [root@hadoop1 bin]# hbase shell
29 hbase(main):001:0> status
30 3 servers, 0 dead, 0.6667 average load
31  
32 hbase(main):002:0> exit
33 [root@hadoop1 bin]# cd /work/zookeeper/zookeeper-3.4.5/bin
34 [root@hadoop1 bin]# ./zkCli.sh -server hadoop1:2181
35 [zk: hadoop1:2181(CONNECTED) 0] ls /
36 [hbase, zookeeper]
37 [zk: hadoop1:2181(CONNECTED) 1] quit
38 Quitting...
39 [root@hadoop1 bin]#

到此,hbase完全分布模式安装就结束了。

hadoop支持的压缩算法

hadoop支持的压缩格式,如下表所示:

 压缩格式  工具  算法  文件扩展名  多文件  可分割性  Java实现  本地实现
 DEFLATE  无  DEFLATE  .deflate  否  否  是  是
 gzip  gzip  DEFLATE  .gz  否  否  是  是
 bzip2  bzip2  bzip2  .bz2  否  是  是  否
 LZO  lzop  LZO  .lzo  否  是  否  是

hadoop压缩编码/解码器,如下表所示:

 压缩格式  Hadoop压缩编码/解码器
 DEFLATE org.apache.hadoop.io.compress.DefaultCodec
 gzip org.apache.hadoop.io.compress.GzipCodec
 bzip2 org.apache.hadoop.io.compress.BZip2Codec
 LZO com.hadoop.compression.lzo.LzopCodec

其中,LZO格式是基于GPL许可的,不能通过Apache来分发许可,它的hadoop编码/解码器必须单独下载,下载地址:http://www.oberhumer.com/opensource/lzo/

设置Map处理后压缩数据的代码,如下所示:

1 JobConf job = new JobConf();
2 job.setBoolean("mapred.compress.map.output", true);

设置output输出压缩的代码,如下所示:

1 JobConf job = new JobConf();
2 job.setBoolean("mapred.output.compress", true);
3 job.setClass("mapred.output.compression.codec", GzipCodec.class, CompressionCodec.class);

FROM:http://www.juziku.com/wiki/5989.htm,http://wiki.juziku.com/

有关hadoop分布式配置详解的更多相关文章

  1. Hadoop新生报到(一) hadoop2.6.0伪分布式配置详解

    首先先不看理论,搭建起环境之后再看: 搭建伪分布式是为了模拟环境,调试方便. 电脑是win10,用的虚拟机VMware Workstation 12 Pro,跑的Linux系统是centos6.5 , ...

  2. Hadoop2.2.0分布式安装配置详解[2/3]

    前言 本文主要通过对hadoop2.2.0集群配置的过程加以梳理,所有的步骤都是通过自己实际测试.文档的结构也是根据自己的实际情况而定,同时也会加入自己在实际过程遇到的问题.搭建环境过程不重要,重要点 ...

  3. hadoop 0.20.2伪分布式安装详解

    adoop 0.20.2伪分布式安装详解 hadoop有三种运行模式: 伪分布式不需要安装虚拟机,在同一台机器上同时启动5个进程,模拟分布式. 完全分布式至少有3个节点,其中一个做master,运行名 ...

  4. Flume NG 配置详解(转)

    原文链接:[转]Flume NG 配置详解 (说明,名词对应解释 源-Source,接收器-Sink,通道-Channel) 配置 设置代理 Flume代理配置存储在本地配置文件.这是一个文本文件格式 ...

  5. Hadoop RPC机制详解

    网络通信模块是分布式系统中最底层的模块,他直接支撑了上层分布式环境下复杂的进程间通信逻辑,是所有分布式系统的基础.远程过程调用(RPC)是一种常用的分布式网络通信协议,他允许运行于一台计算机的程序调用 ...

  6. hadoop之mapreduce详解(进阶篇)

    上篇文章hadoop之mapreduce详解(基础篇)我们了解了mapreduce的执行过程和shuffle过程,本篇文章主要从mapreduce的组件和输入输出方面进行阐述. 一.mapreduce ...

  7. hadoop之yarn详解(框架进阶篇)

    前面在hadoop之yarn详解(基础架构篇)这篇文章提到了yarn的重要组件有ResourceManager,NodeManager,ApplicationMaster等,以及yarn调度作业的运行 ...

  8. 大数据学习day11------hbase_day01----1. zk的监控机制,2动态感知服务上下线案例 3.HDFS-HA的高可用基本的工作原理 4. HDFS-HA的配置详解 5. HBASE(简介,安装,shell客户端,java客户端)

    1. ZK的监控机制 1.1 监听数据的变化  (1)监听一次 public class ChangeDataWacher { public static void main(String[] arg ...

  9. Apache日志配置详解(rotatelogs LogFormat)

    logs/error_logCustomLog logs/access_log common--默认为以上部分 修改为如下: ErrorLog "|/usr/sbin/rotatelogs ...

随机推荐

  1. LeetCode 260

    Single Number III Given an array of numbers nums, in which exactly two elements appear only once and ...

  2. 【原】web服务器占有量统计等 web网站

    根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中 1. https://w3techs.com/ nginx 中文站 2. http://www.nginx.cn/doc/

  3. PowerShell 解锁使用浏览器下载的文件

    1 dir *.* -Recurse | Unblock-File

  4. Sqlite官方下载对应版本注意细节

    官网下载地址: http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki 下载注意事项: 1.对应.net平台 2.对 ...

  5. Linux 命令 - at: 在指定的时间执行任务

    在指定的时间执行任务. 命令格式 at [-V] [-q queue] [-f file] [-mldbv] TIMEat [-V] [-q queue] [-f file] [-mldbv] -t ...

  6. 面试之C#--垃圾回收器什么时候回收?

    每个对象只有在该对象不存在任何引用才会被垃圾回收起回收. 可以调用静态方法System.GC.Collect()垃圾回收器,但是不建议这么做: 用using语句可以有效的自动释放掉资源. 实在没有办法 ...

  7. jquery学习--选择器

    选择器:basic $('button') html 标签 $('#test') 标签ID $('.test') 标签的class $('.test,#test,h1') 多选用逗号隔开 $('*') ...

  8. CSS之拖拽库2

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...

  9. Contoso 大学 - 5 – 读取关联数据

    原文 Contoso 大学 - 5 – 读取关联数据 By Tom Dykstra, Tom Dykstra is a Senior Programming Writer on Microsoft's ...

  10. 合理使用mysql中的load data infile导入数据

    基本语法: load data  [low_priority] [local] infile 'file_name txt' [replace | ignore]into table tbl_name ...