首页 > 代码库 > 学习hadoop

学习hadoop

一、笔记本触摸板关闭方法

 1、在windows下有官方驱动。

   2、ubuntu下没有

 操作方法如下:

 1,终端操作

临时禁止触摸板:sudo modprobe -r psmouse

 

开启触摸板:sudo modprobe -a psmouse

 

永远禁用触摸板:

sudo vi /etc/modprobe.d/blacklist.conf
blacklist psmouse
 那就用第二种。

 2,在软件中心中搜索"pointing-device"安装,

   选择disabled touched.

        这样只关闭了触摸板,左右键也可用。

/etc/rc.local 加入信息 开机时刻,也可以使用

电脑安装Ubuntu 13.10 版本后,进入Ubuntu系统后鼠标指针不停的闪烁,看起来很不爽,解决办法如下

    打开系统设置
    选择“显示”  注:此时会看到一个内置显示器和一个未知显示器
    单机“未知显示器”
    在下面的选项中第一行显示该显示器已开启,单机开启,此时“未知显示器”关闭
    解决完毕,鼠标不再闪烁

二、Ubuntu不显示时间

//不显示时间了 试一下

(1)pkill gnome-panel

(2)ctrl+alt+f2,登陆后 pkill gnome-session

 

二、关于文件解压

ZIP

zip可能是目前使用得最多的文档压缩格式。它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用。缺点就是支持的压缩率不是很高,而tar.gz和tar.gz2在压缩率方面做得非常好。闲话少说,我们步入正题吧:

我们可以使用下列的命令压缩一个目录:

# zip -r archive_name.zip directory_to_compress

下面是如果解压一个zip文档:

# unzip archive_name.zip

TAR

Tar是在Linux中使用得非常广泛的文档打包格式。它的好处就是它只消耗非常少的CPU以及时间去打包文件,他仅仅只是一个打包工具,并不负责压缩。下面是如何打包一个目录:

# tar -cvf archive_name.tar directory_to_compress

如何解包:

# tar -xvf archive_name.tar.gz

上面这个解包命令将会将文档解开在当前目录下面。当然,你也可以用这个命令来捏住解包的路径:

# tar -xvf archive_name.tar -C /tmp/extract_here/

TAR.GZ

这种格式是我使用得最多的压缩格式。它在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率。使用下面这种格式去压缩一个目录:

# tar -zcvf archive_name.tar.gz directory_to_compress

解压缩:

# tar -zxvf archive_name.tar.gz

上面这个解包命令将会将文档解开在当前目录下面。当然,你也可以用这个命令来捏住解包的路径:

# tar -zxvf archive_name.tar.gz -C /tmp/extract_here/

TAR.BZ2

这种压缩格式是我们提到的所有方式中压缩率最好的。当然,这也就意味着,它比前面的方式要占用更多的CPU与时间。这个就是你如何使用tar.bz2进行压缩。

# tar -jcvf archive_name.tar.bz2 directory_to_compress

上面这个解包命令将会将文档解开在当前目录下面。当然,你也可以用这个命令来捏住解包的路径:

# tar -jxvf archive_name.tar.bz2 -C /tmp/extract_here/

 

三、hadoop安装

/home/feng/hadoop-0.20.2/bin/hadoop namenode -format

/home/feng/hadoop-0.20.2/bin/start-all.sh  

/home/feng/jdk1.6.0_45/bin/jps

  

    bin/hadoop dfs -put ../input in  

      bin/hadoop dfs -ls ./in/*

      bin/hadoop jar hadoop-0.20.2-examples.jar wordcount in out

bin/hadoop dfs -ls

bin/hadoop dfs -cat ./out/*

 

出现错误

(1)如果 ssh 127.0.0.1时,报出错误:ssh: connect to host 127.0.0.1 port 22: Connection refused

  sudo apt-get install openssh-server  

  ps -e | grep ssh  

 

  

 

 

(2)、用jps命令查看守护进程时,没有DataNode,datanode无法启动

  访问http://localhost:50070,点击页面中的Namenode logs链接,在logs页面点击hadoop-hadoop-datanode-ubuntu.log 链接,查看 日志文件

 

网络解决方案

(1)摘要:该文档解决了多次格式化文件系统后,datanode无法启动的问题

一、问题描述

       当我多次格式化文件系统时,如

               root@localhost:/usr/local/hadoop-1.0.2# bin/hadoop namenode -format

     会出现datanode无法启动,查看日志,发现错误为:

        2012-04-20 20:39:46,501 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /home/gqy/hadoop/data: namenode namespaceID = 155319143; datanode namespaceID = 1036135033

二、问题产生原因

         当我们执行文件系统格式化时,会在namenode数据文件夹(即配置文件中dfs.name.dir在本地系统的路径)中保存一个 current/VERSION文件,记录namespaceID,标识了所格式化的 namenode的版本。如果我们频繁的格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系统的路径) 的current/VERSION文件只是你第一次格式化时保存的namenode的ID,因此就会造成datanode与namenode之间的id不 一致。

三、解决办法

      把配置文件中dfs.data.dir在本地系统的路径下的current/VERSION中的namespaceID改为与namenode一样。

(2)、bin/hadoop dfsadmin -safemode leave 再输入

    bin/hadoop dfsadmin -safemode enter 在有in目录的前提下输入 bin/hadoop jar hadoop-0.20.2-examples.jar wordcount in out

 

hadoop删除文件

  bin/hadoop fs -rmr /user/root/in/input

 hadoop:在hfds下删除文件can not found file

在浏览hdfs上面的文件的时候,要在hadoop的安装目录下

[hadoop@master hadoop-0.20.2]$bin/hadoop fs -ls

进行查看,但是想要删除hdfs里面的文件,路径就需要是hdfs的专属路径,因为hdfs的文件路径和linux的本地路径是完全两套系统

例如想删除file01文件

[hadoop@master hadoop-0.20.2]$bin/hadoop fs -rmr hdfs://master:54310/user/hadoop/file01



[hadoop@master hadoop-0.20.2]$bin/hadoop fs -rmr /user/hadoop/file01

其中,路径中的user是固定的,标橙色的部分是你的hadoop的相关用户

学习日记记录

 

通过web了解Hadoop的活动 通过用浏览器和http访问jobtracker所在节点的50030端口监控jobtracker

通过用浏览器和http访问namenode所在节点的50070端口监控集群

 

HDFS设计基础与目标

 

 

硬件错误是常态。

因此需要冗余 流式数据访问,即数据批量读取而非随机对写,Hadoop擅长做的是数据分析而不是事务处理 大规模数据集 简单一致性模型。为了降低系统复杂度,对文件采用一次性写多次读的逻辑设计,即是文件一经写入,关闭,就再也不能修改

程序采用“数据就近”原则分配节点执行

HDFS NameNode DataNode 事务日志 映像文件 SecondaryNode

 

Namenode 管理文件系统的命名空间

记录每个文件数据快在各个Datanode上的位置和副本信息

协调客户端对文件的访问 记录命名空间内的改动或空间本身属性的改动 Namenode使用事务日志记录HDFS数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等

Datanode 负责所在物理节点的存储管理 一次写入,多次读取(不修改) 文件由数据块组成,典型的块大小是64MB 数据块尽量散布到各个节点

读取数据流程 客户端要访问HDFS中的一个wenj 首先从namenode获得组成这个文件的数据块位置列表 根据列表知道存储数据开的datanode 访问datanode获取数据 Namenode并不参与数据实际传输

HDFS 的可靠性 冗余副本策略 机架策略 心跳机制 安全模式 校验和 回收站 元数据保护 快照机制 冗余副本策略 可以在hdfs-site.xml中设置复制因子指定副本数量 所有数据块都有副本 Datanode启动时,遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系列表(blockreport)汇报给namenode

机架策略 集群一般放在不同机架上,机架间带宽比机架内带宽要小 HDFS的“机架感知” 一般在本地架存放一个副本,在其它机架再存放别的副本,这样可以防止机架失效时丢失数据,也可以提高带宽利用率

心 跳机制 Namenode周期性从datanode接收心跳信号和块报告 Namenode根据块报告验证元数据 没有按时发送心跳的datanode会被标记为宕机,不会再给它任何I/O请求 如果datanode失效造成副本数量下降,并且低于预先设置的阈值,namenode会检测出这些数据块,并在合适的时机进行重新复制 引发重新复制的原因还包括数据副本本身损坏/ 磁盘错误,复制因子被增大等

安 全模式 Namenode启动时会先经过一个“安全模式”阶段 安全模式阶段不会产生数据写 在阶段Namenode收集各个datanode的报告,当数据块到最小副本数以上时,会被认为是“安全”的 在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数

校验和 在文件创立时,每个文件块都产生校验和 校验和会作为单独一个隐藏文件保存在命名空间下 客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏 如果正在读取的数据块损坏,则可以继续读取其它副本

回收站 删除文件时,其实时放入回收站/trash 回收站里的文件可以快速恢复 可以设置一个时间阈值,当回收站文件的存放时间超过这个阈值,就被彻底删除,并且释放占用的数据块

元数据保护 映像文件刚和事务日志是Namenode的核心数据,可以配置为拥有多个副本 副本会降低Namenode的处理速度,但增加安全性 Namenode依然是单点,如果发生故障要手先切换

快照 支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态 Hadoop目前还不支持,已经列入开发计划

HDFS文件操作 命令行方式 API方式

hadoop没有目录的概念,也没有cd命令 源文件 节点 bin/hadoop dfs -put ../abc abc ls -lR

HDFS文件复制到本地 bin/hadoop dfs -get abc ./xyz

删除HDFS的文档 bin/hadoop dfs -rmr abc

查看HDFS下某个文件的内容

bin/hadoop dfs -cat ./out/part-r-00000

查看HDFS基本统计信息 bin/hadoop dfsadmin -report

进入和推出安全模式 bin/hadoop dfsadmin -safemode enter bin/hadoop dfsadmin -safemode leave

     ls|wc -l 查看文件大小

    zcat ...........gz|less 可以看到gz文件,less可以翻屏

    zcat *.gz >abc 小文件集成为大文件 abc 为大文件

    input 上传文件 分解为块,将任务分解map --->shuffle 排序 压缩数据,reduce阶段 集中在某一节点,将所有的结果合并merge,所有记录放到大数据表中,最后形成最后结果,可能hdfs文件

简单没有reduce,复杂的有多个reduce

Map-reduce的思想就是“分而治之”

Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”执行

“简单的任务”有几个含义:1数据或计算规模相对于原任务要大大缩小;2就近计算,即会被分配到存放了所需数据的节点进行计算;3这些小任务可以并行计算,彼此间几乎没有依赖关系

Reducer
对map阶段的结果进行汇总
Reducer的数目由mapred-site.xml配置文件里的项目mapred.reduce.tasks决定。缺省值为1,用户可以覆盖之

Shffler
在mapper和reducer中间的一种步骤(可以没有)
可以把mapper的输出按照某种key值重新切分和组合n份,把key值符合某种范围的输出送到特定的reducer那里去处理
可以简化reducer过程

网络界面:http://192.168.1.102:50030/jobtraker.jsp

观看参数列表
http://192.168.1.102:50030/logs/

性能调优
究竟需要多少个reducer
输入:大文件优于小文件
减少网路传输:压缩map的输出
优化每个节点能运行的任务数:mapred.tasktraker.map.tasks.maximum和mapred.trasktraker.reduce.tasks.maximum(缺省值均为2)
Map-Reduce工作机制剖(pou)析
1编写好Map-Reduce程序,client node 对程序进行提交
2JobClient收到作业以后,与JobTracker联系,申请job ID,获得工作ID后,
3将源码散发出去,通过Shared FileSystem 散发到各个节点里面去
4提交作业
5JobTracker中initialize job,初始化工作,建立数据结构,记录job运行情况等等
6JobTracker会向hdfs中node 询问有关的数据在那些文件里面,文件散列在那些节点里面
7通过JobTracker与TaskTracker进行心跳联系,TaskTracker必须时能工作,负荷比较低,最好空闲节点
8定制出TaskTracker
9TaskTracker 架设运行
调度机制
缺省为先入先出作业队列调度
支持公平调度器(作业公平)
支持容量调度器

任务执行优化
推测式执行:即如果jobtracker发现有拖后腿的任务,会再启动一个相同的备份任务,然后哪个先执行完就会kill去另外一个,因此在监控网页上经常看到正常执行完的作业被kill的任务
推测执行缺省打开,但如果时代码问题,并不能解决问题,而且会使集群更慢,通过在mapred-site.xml配置文件中设置mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.execution可为map任务或reduce任务开启或关闭推测式执行
重启JVM,可以省去启动新的JVM消耗的时间,在mapred-site.xml配置文件中设置mpared.job.reuse.jvm.num.tasks设置单个JVM上运行的最大任务数(1,>1或-1表示没有限制)
忽略模式,任务在读取数据失败2次后,会把数据位置告诉jobtracker,后者重新启动该任务并且在遇到所记录的坏数据时直接跳过(缺省关闭,用SkipBadRecord方法打开)
错误处理机制:硬件故障
硬件故障时指jobreduce故障或tasktracker故障
jobtracker是单点,若发生故障目前hadoop还无法处理,唯有选择最牢靠的硬件作为jobtracker
Jobtracker通过心跳(周期1分钟)信号了解tasktracker是否发生故障或负载过于严重
Jobtracker将从任务节点列表中移除发生故障的tasktracker
如果故障节点在执行map任务并且尚未完成,jobtracker会要求其它节点重新执行此map任务
如果故障节点在执行reduce任务尚未完成,jobtracker会要求其它节点继续执行尚未完成的reduce任务

错误处理机制:任务失败
由于代码缺陷或进程崩溃引起任务失败
Jvm自动退出,向tasktracker父进程发送方错误信息,错误信息也会写入到日志
Tasktracker监听程序会发现进程退出,或进程很久没有更新信息送回,将任务标记为失败
标记失败任务后,人际计数器减去1以便接受鑫任务,并通过心跳信号告诉jobtracker任务失败的信息
Jobtracker获悉任务失败后,将把该任务重新放入调度队列,重新分配出去再执行
如果一个任务失败超过4次(可以设置),将不会再被执行,同时作业也宣布失败

Hadoop命令大全
hadoop.apache.org/common/docs/stable/commands_manual.html
审计日志
把log4j.properties配置文件中
log4j.logger.org.apache.hadoop.fs.FSNamesystem.audit=WARN
改为"INFO"可以打开审计日志。每个HDFS事件都会在namenode的log中写入一行记录
192.168.1.102:50070/logLevel

第三方工具
Ganglia
Chukwa
Openstack