linux配置ssh无密码登录
配置ssh无密码登录,先要安装openssh,如下:
yum install openssh-clients
准备两台linux服务器或虚拟机,设置两台linux的hosts为:
1 |
[root@hadoop1 ~]# vim /etc/hosts |
再按照如下步骤:
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: |
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 |
4 |
[root@hadoop1 .ssh]# vim authorized_keys |
5 |
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqUQBAWIx+zD6YJ478RT5FUTvwpFlu5MQhsXlLjrTdXLpSwCoti4vpV1e7EKy6AS8Scujfu1vaMS5hPIwjScjjFb5iCL7/dklf33ariEFFuLcTQ3BvEfaOZOf88hx/Yn9ysiW+rVeHWqBAYvOSSmhP6HYoYF/as5taLw+95BkilxPhI+SgvUjqLHiJi75qyUHpCCFWMopWPB3PGjOgMNO66ulS7/mnWsUpEV07pwuR2I5HfTTqz693xIXZ1b9l3+0AOTEA5Lyr8QU4BCbylgyadLZsCqtDg8L16voJBXmYA4iAdbJ/+BjKGMNUC15XAS995Bt7FHRlfl4AIbDV6liNw== root@hadoop1 |
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 |
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 |
配置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 |
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 |
05 |
<? xml-stylesheet type = "text/xsl" href = "configuration.xsl" ?>
|
08 |
< name >dfs.replication</ name >
|
13 |
[root@hadoop1 conf]# vim mapred-site.xml |
15 |
<? xml-stylesheet type = "text/xsl" href = "configuration.xsl" ?>
|
18 |
< name >mapred.job.tracker</ name >
|
19 |
< value >hadoop1:9001</ value >
|
23 |
[root@hadoop1 conf]# vim core-site.xml |
25 |
<? xml-stylesheet type = "text/xsl" href = "configuration.xsl" ?>
|
28 |
< name >fs.default.name</ name >
|
29 |
< value >hdfs://hadoop1:9000</ value >
|
33 |
[root@hadoop1 conf]# vim masters |
36 |
[root@hadoop1 conf]# vim slaves |
再把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. |
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 |
13 |
1425 SecondaryNameNode |
完成以上步骤,就完成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文件内容如下所示:
02 |
<? xml-stylesheet type = "text/xsl" href = "configuration.xsl" ?>
|
06 |
< name >fs.default.name</ name >
|
07 |
<!-- 填写hadoop的IP地址 也可以在hosts中指定,如下所示 -->
|
08 |
< value >hdfs://hadoop1:9000</ value >
|
操作HDFS文件系统代码如下所示:
03 |
import java.io.IOException;
|
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;
|
11 |
* Hadoop1.x 测试HDFS API简单使用
|
14 |
* @date 2013-1-25 下午3:55:05
|
15 |
* http://www.juziku.com/sunlightcs/
|
17 |
public class CreatFile {
|
18 |
private static Configuration conf = new Configuration();
|
24 |
public static void createFile(String path) throws IOException{
|
25 |
FileSystem fs = FileSystem.get(conf);
|
26 |
fs.createNewFile( new Path(path));
|
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);
|
47 |
public static void createDir(String dir) throws IOException{
|
48 |
FileSystem fs = FileSystem.get(conf);
|
49 |
fs.mkdirs( new Path(dir));
|
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" );
|
注:设置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 |
Hadoop校验和的检验
客户端上传数据或DataNode从其他DataNode上接收数据时,都会检查校验和,把真实数据的校验和同datanode上的校验和进行比较。
每创建一个文件filename.txt时,就会在同目录下创建.filename.txt.crc检验和文件,默认情况下,每512个字节就会生成一个32位的校验和,可以在core-site.xml文件中修改默认值:
2 |
< name >io.bytes.per.checksum</ name >
|
也可以禁止Hadoop校验和检验:
2 |
< name >fs.file.impl</ name >
|
3 |
< value >org.apache.hadoop.fs.RawLocalFileSystem</ value >
|
或者如下:
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 |
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 |
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 |
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数据库驱动、数据库名、用户名及密码,修改的内容如下所示:
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 >
|
07 |
< name >javax.jdo.option.ConnectionDriverName</ name >
|
08 |
< value >com.mysql.jdbc.Driver</ value >
|
09 |
< description >Driver class name for a JDBC metastore</ description >
|
12 |
< name >javax.jdo.option.ConnectionUserName</ name >
|
14 |
< description >username to use against metastore database</ description >
|
17 |
< name >javax.jdo.option.ConnectionPassword</ name >
|
19 |
< description >password to use against metastore database</ description >
|
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); |
07 |
Time taken: 3.242 seconds |
08 |
hive> select * from user; |
10 |
Time taken: 0.275 seconds |
看到上面结果后,证明Hive可以正常工作了
这里我们可以用一个跟强大一点的分布式数据库,hbase来进行检验
Hadoop里MapReduce实现单词数统计
Hadoop操作MapReduce实现单词统计,代码如下:
03 |
import java.io.IOException;
|
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;
|
17 |
* @date 2013-1-29 下午3:21:30
|
18 |
* http://www.juziku.com/sunlightcs/
|
20 |
public class WordCountMapper extends MapReduceBase implements
|
21 |
Mapper<LongWritable, Text, Text, IntWritable> {
|
23 |
Text key = new Text();
|
24 |
IntWritable value = new IntWritable( 1 );
|
26 |
public void map(LongWritable arg0, Text arg1,
|
27 |
OutputCollector<Text, IntWritable> arg2, Reporter arg3)
|
30 |
String lines[] = arg1.toString().split( "\\W+" );
|
31 |
for (String line : lines){
|
33 |
arg2.collect(key, value);
|
03 |
import java.io.IOException;
|
04 |
import java.util.Iterator;
|
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;
|
17 |
* @date 2013-1-29 下午3:35:51
|
18 |
* http://www.juziku.com/sunlightcs/
|
20 |
public class WordCountReduce extends MapReduceBase implements
|
21 |
Reducer<Text, IntWritable, Text, IntWritable> {
|
22 |
IntWritable value = new IntWritable();
|
24 |
public void reduce(Text arg0, Iterator<IntWritable> arg1,
|
25 |
OutputCollector<Text, IntWritable> arg2, Reporter arg3)
|
28 |
while (arg1.hasNext()){
|
29 |
sum += arg1.next().get();
|
32 |
arg2.collect(arg0, value);
|
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;
|
19 |
* @date 2013-1-29 下午3:40:34
|
20 |
* http://www.juziku.com/sunlightcs/
|
22 |
public class MapReduceTest extends Configured implements Tool{
|
25 |
public int run(String[] arg0) throws Exception {
|
26 |
JobConf conf = new JobConf(getConf(), MapReduceTest. class );
|
28 |
conf.setJobName( "WordCount" );
|
31 |
conf.setOutputKeyClass(Text. class );
|
32 |
//设置输出Value的类型为IntWritable
|
33 |
conf.setOutputValueClass(IntWritable. class );
|
36 |
conf.setMapperClass(WordCountMapper. class );
|
38 |
conf.setReducerClass(WordCountReduce. class );
|
40 |
//设置输入的路径 预先通过put,拷几个文件到HDFS下的/com/juziku/testdata
|
41 |
FileInputFormat.setInputPaths(conf, new Path( "/com/juziku/testdata" ));
|
43 |
FileOutputFormat.setOutputPath(conf, new Path( "/output/testdata" ));
|
45 |
JobClient.runJob(conf);
|
49 |
public static void main(String[] args) throws Exception {
|
50 |
int status = ToolRunner.run( new MapReduceTest(), args);
|
把上面的代码打成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 |
17 |
[root@hadoop1 bin]# ./hadoop fs -cat /com/juziku/testdata/test2.txt |
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 |
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 |
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
|
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
|
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
|
06 |
<?xml-stylesheet type = "text/xsl" href= "configuration.xsl" ?>
|
09 |
<name>hbase.rootdir</name>
|
10 |
<value>hdfs://hadoop1:9000/hbase</value>
|
11 |
<description>The directory shared by RegionServers.</description>
|
14 |
<name>hbase.cluster.distributed</name>
|
18 |
<name>hbase.master</name>
|
19 |
<value>hadoop1:60000</value>
|
22 |
<name>hbase.zookeeper.quorum</name>
|
23 |
<value>hadoop1,hadoop2,hadoop3</value>
|
其中:hadoop1、hadoop2、hadoop3需在/etc/hosts里配置,如下所示:
1 |
[root@hadoop1 conf] # cat /etc/hosts
|
把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
|
修改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 |
07 |
# The number of ticks that the initial |
08 |
# synchronization phase can take |
10 |
# The number of ticks that can pass between |
11 |
# sending a request and getting an acknowledgement |
13 |
# the directory where the snapshot is stored. |
14 |
# do not use /tmp for storage, /tmp here is just |
16 |
dataDir=$HADOOP_HOME/zookeeper-3.4.5/data |
17 |
# the port at which the clients will connect |
20 |
# Be sure to read the maintenance section of the |
21 |
# administrator guide before turning on autopurge. |
23 |
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance |
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 |
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
|
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
|
08 |
export JRE_HOME=$JAVA_HOME/jre
|
09 |
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
|
10 |
export PATH=$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
|
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 |
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
|
22 |
4114 SecondaryNameNode |
28 |
[root@hadoop1 bin] # hbase shell
|
29 |
hbase(main):001:0> status |
30 |
3 servers, 0 dead, 0.6667 average load |
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 /
|
37 |
[zk: hadoop1:2181(CONNECTED) 1] quit |
到此,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/