import orgapachehadoopio{LongWritable, Text}
import orgapachehadoopmapred{FileSplit, InputSplit, TextInputFormat}
import orgapachespark{SparkConf, SparkContext}
import orgapachesparkrddHadoopRDDobject testPathOld {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
confsetAppName("testtoParquet")
confsetMaster("local")
val sc = new SparkContext(conf)
var input = "/home/dwj/data/testSpark/20180409"
val fileRDD = schadoopFile[LongWritable, Text, TextInputFormat](input)
val hadoopRDD = fileRDDasInstanceOf[HadoopRDD[LongWritable, Text]]
val fileAdnLine = hadoopRDDmapPartitionsWithInputSplit((inputSplit:InputSplit,iterator:Iterator[(LongWritable, Text)]) => {
val file = inputSplitasInstanceOf[FileSplit]
iteratormap(x => {filegetPathtoString()+"\t" + x_2})
})
fileAdnLineforeach(println)
}
}什么是大数据:
(1)大数据是指在一定时间内无法用常规软件对其内容进行抓取,管理和处理的数据集合,简而言之就是数据量非常大,大到无法用常规工具进行处理,如关系型数据库,数据仓库等。这里“大”是一个什么量级呢?如在阿里巴巴每天处理数据达到20PB(即20971520GB)
2大数据的特点:
(1)体量巨大。按目前的发展趋势来看,大数据的体量已经到达PB级甚至EB级。
(2)大数据的数据类型多样,以非结构化数据为主,如网络杂志,音频,视屏,,地理位置信息,交易数据,社交数据等。
(3)价值密度低。有价值的数据仅占到总数据的一小部分。比如一段视屏中,仅有几秒的信息是有价值的。
(4)产生和要求处理速度快。这是大数据区与传统数据挖掘最显著的特征。
3除此之外还有其他处理系统可以处理大数据。
Hadoop (开源)
Spark(开源)
Storm(开源)
MongoDB(开源)
IBM PureDate(商用)
Oracle Exadata(商用)
SAP Hana(商用)
Teradata AsterData(商用)
EMC GreenPlum(商用)
HP Vertica(商用)
注:这里我们只介绍Hadoop。
二:Hadoop体系结构
Hadoop来源:
Hadoop源于Google在2003到2004年公布的关于GFS(Google File System),MapReduce和BigTable的三篇论文,创始人Doug Cutting。Hadoop现在是Apache基金会顶级项目,“
Hadoop”一个虚构的名字。由Doug Cutting的孩子为其玩具大象所命名。
Hadoop的核心:
(1)HDFS和MapReduce是Hadoop的两大核心。通过HDFS来实现对分布式储存的底层支持,达到高速并行读写与大容量的储存扩展。
(2)通过MapReduce实现对分布式任务进行处理程序支持,保证高速分区处理数据。
3Hadoop子项目:
(1)HDFS:分布式文件系统,整个Hadoop体系的基石。
(2)MapReduce/YARN:并行编程模型。YARN是第二代的MapReduce框架,从Hadoop 02301版本后,MapReduce被重构,通常也称为MapReduce V2,老MapReduce也称为 MapReduce V1。
(3)Hive:建立在Hadoop上的数据仓库,提供类似SQL语音的查询方式,查询Hadoop中的数据,
(5)HBase:全称Hadoop Database,Hadoop的分布式的,面向列的数据库,来源于Google的关于BigTable的论文,主要用于随机访问,实时读写的大数据。
(6)ZooKeeper:是一个为分布式应用所设计的协调服务,主要为用户提供同步,配置管理,分组和命名等服务,减轻分布式应用程序所承担的协调任务。
还有其它特别多其它项目这里不做一一解释了。
三:安装Hadoop运行环境
用户创建:
(1)创建Hadoop用户组,输入命令:
groupadd hadoop
(2)创建hduser用户,输入命令:
useradd –p hadoop hduser
(3)设置hduser的密码,输入命令:
passwd hduser
按提示输入两次密码
(4)为hduser用户添加权限,输入命令:
#修改权限
chmod 777 /etc/sudoers
#编辑sudoers
Gedit /etc/sudoers
#还原默认权限
chmod 440 /etc/sudoers
先修改sudoers 文件权限,并在文本编辑窗口中查找到行“root ALL=(ALL)”,紧跟后面更新加行“hduser ALL=(ALL) ALL”,将hduser添加到sudoers。添加完成后切记还原默认权限,否则系统将不允许使用sudo命令。
(5)设置好后重启虚拟机,输入命令:
Sudo reboot
重启后切换到hduser用户登录
安装JDK
(1)下载jdk-7u67-linux-x64rpm,并进入下载目录。
(2)运行安装命令:
Sudo rpm –ivh jdk-7u67-linux-x64rpm
完成后查看安装路径,输入命令:
Rpm –qa jdk –l
记住该路径,
(3)配置环境变量,输入命令:
Sudo gedit /etc/profile
打开profile文件在文件最下面加入如下内容
export JAVA_HOME=/usr/java/jdk7067
export CLASSPATH=$ JAVA_HOME/lib:$ CLASSPATH
export PATH=$ JAVA_HOME/bin:$PATH
保存后关闭文件,然后输入命令使环境变量生效:
Source /etc/profile
(4)验证JDK,输入命令:
Java –version
若出现正确的版本则安装成功。
配置本机SSH免密码登录:
(1)使用ssh-keygen 生成私钥与公钥文件,输入命令:
ssh-keygen –t rsa
(2)私钥留在本机,公钥发给其它主机(现在是localhost)。输入命令:
ssh-copy-id localhost
(3)使用公钥来登录输入命令:
ssh localhost
配置其它主机SSH免密登录
(1)克隆两次。在VMware左侧栏中选中虚拟机右击,在d出的快捷键菜单中选中管理---克隆命令。在克隆类型时选中“创建完整克隆”,单击“下一步”,按钮直到完成。
(2)分别启动并进入三台虚拟机,使用ifconfig查询个主机IP地址。
(3)修改每台主机的hostname及hosts文件。
步骤1:修改hostname,分别在各主机中输入命令。
Sudo gedit /etc/sysconfig/network
步骤2:修改hosts文件:
sudo gedit /etc/hosts
步骤3:修改三台虚拟机的IP
第一台对应node1虚拟机的IP:1921681130
第二台对应node2虚拟机的IP:1921681131
第三台对应node3虚拟机的IP:1921681132
(4)由于已经在node1上生成过密钥对,所有现在只要在node1上输入命令:
ssh-copy-id node2
ssh-copy-id node3
这样就可以将node1的公钥发布到node2,node3。
(5)测试SSH,在node1上输入命令:
ssh node2
#退出登录
exit
ssh node3
exit
四:Hadoop完全分布式安装
1 Hadoop有三种运行方式:
(1)单机模式:无须配置,Hadoop被视为一个非分布式模式运行的独立Java进程
(2)伪分布式:只有一个节点的集群,这个节点即是Master(主节点,主服务器)也是Slave(从节点,从服务器),可在此单节点上以不同的java进程模拟分布式中的各类节点
(3)完全分布式:对于Hadoop,不同的系统会有不同的节点划分方式。
2安装Hadoop
(1)获取Hadoop压缩包hadoop-260targz,下载后可以使用VMWare Tools通过共享文件夹,或者使用Xftp工具传到node1。进入node1 将压缩包解压到/home/hduser目录下,输入命令:#进入HOME目录即:“/home/hduser”
cd ~
tar –zxvf hadoop-260targz
(2)重命名hadoop输入命令:
mv hadoop-260 hadoop
(3)配置Hadoop环境变量,输入命令:
Sudo gedit /etc/profile
将以下脚本加到profile内:
#hadoop
export HADOOP_HOME=/home/hduser/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
保存关闭,最后输入命令使配置生效
source /etc/profile
注:node2,和node3都要按照以上配置进行配置。
3配置Hadoop
(1)hadoop-envsh文件用于指定JDK路径。输入命令:
[hduser@node1 ~]$ cd ~/hadoop/etc/hadoop
[hduser@node1 hadoop]$ gedit hadoop-envsh
然后增加如下内容指定jDK路径。
export JAVA_HOME=/usr/java/jdk170_67
(2)打开指定JDK路径,输入命令:
export JAVA_HOME=/usr/java/jdk170_67
(4)core-sitexml:该文件是Hadoop全局配置,打开并在元素中增加配置属性如下:
fsdefaultFshdfs://node1:9000hadooptmpdirfile:/home/hduser/hadoop/tmp这里给出了两个常用的配置属性,fsdefaultFS表示客户端连接HDFS时,默认路径前缀,9000是HDFS工作的端口。Hadooptmpdir如不指定会保存到系统的默认临时文件目录/tmp中。(5)hdfs-sitexml:该文件是hdfs的配置。打开并在元素中增加配置属性。(6)mapred-sitexml:该文件是MapReduce的配置,可从模板文件mapred-sitexmltemplate中复制打开并在元素中增加配置。(7)yarn-sitexml:如果在mapred-sitexml配置了使用YARN框架,那么YARN框架就使用此文件中的配置,打开并在元素中增加配置属性。(8)复制这七个命令到node2,node3。输入命令如下:scp –r /home/hduser/hadoop/etc/hadoop/ hduser@node2:/home/hduser/hadoop/etc/scp –r /home/hduser/hadoop/etc/hadoop/ hduser@node3:/home/hduser/hadoop/etc/4验证:下面验证hadoop是否正确(1)在Master主机(node1)上格式化NameNode。输入命令:[hduser@node1 ~]$ cd ~/hadoop[hduser@node1 hadoop]$ bin/hdfs namenode –format(2)关闭node1,node2 ,node3,系统防火墙并重启虚拟机。输入命令:service iptables stopsudo chkconfig iptables offreboot(3)输入以下启动HDFS:[hduser@node1 ~]$ cd ~/hadoop(4)启动所有[hduser@node1 hadoop]$ sbin/start-allsh(5)查看集群状态:[hduser@node1 hadoop]$ bin/hdfs dfsadmin –report(6)在浏览器中查看hdfs运行状态,网址:(7)停止Hadoop。输入命令:[hduser@node1 hadoop]$ sbin/stop-allsh五:Hadoop相关的shell *** 作(1)在 *** 作系统中/home/hduser/file目录下创建file1txt,file2txt可使用图形界面创建。file1txt输入内容:Hello World hi HADOOPfile2txt输入内容Hello World hi CHIAN(2)启动hdfs后创建目录/input2[hduser@node1 hadoop]$ bin/hadoop fs –mkdir /input2(3)将file1txtfile2txt保存到hdfs中:[hduser@node1 hadoop]$ bin/hadoop fs –put -/file/filetxt /input2/(4)[hduser@node1 hadoop]$ bin/hadoop fs –ls /input2如果是掌握hadoop的使用,java基础好就可以,看看hadoop权威指南。
想深入学习源码的话,就需要些网络编程的知识了。
大讲台国内首个it在线自适应学习平台。中国的knewton,世界的自适应学习,百度“大讲台”。
具体步骤:
1选择一个Hadoop的版本,然后阅读文档了解Hadoop:What's Hadoop, Why Hadoop exists;
2安装Hadoop,三种方式都试下;
3在Hadoop文档里面有Hadoop Command的资料,Ihdfs command,尽量试试这两方面的命令;
4Hadoop Files,看看Hadoop文件的概念,关注它的分布式特点,然后看Reduce函数输出文件;
5自己写WordCount与Advanced WordCount;
6写Sort程序;
7使用RandomTextWriter;
8模仿SequenceFileInputFormat、SequenceFileOutputFormat、写自己的;
9yahoo有一个Hadoop的教程,英文版的,里面的内容很好;
10《hadoop权威指南》当参考书,自己就可以实战了!
在Linux或Unix *** 作系统中,所有的程序文件都有权限设定,若遇到只读文件,那么就无法对其进行编辑 *** 作。
那么如何才能更改只读文件,让其具备写 *** 作呢?笔者建议按以下步骤进行:
在hadoop配置目录下通过命令ls -l hadoopenv查看hadoopenv 当前的具有的权限项,若显示行开头是-r--或者-r-x,那么就表明所属文件无法进行修改;这时可通过命令chmod u=rwx,go=rx hadoopenv,意思是该文件所属者具有读、写、执行权限,所属群组以及其他人却无法进行写 *** 作;
再次通过ls -l hadoopenv查看,显示行开头变成了-rwx,这时就可以修改此文件啦。
小贴士:作为软件初学者,务必要把Linux或Unix各种 *** 作命令掌握好,这样用的时候就会游刃有余。
hadoop不支持数据的随机读写是因为其效率低下。Hadoop并非不支持随机读写,它也支持。但效率低下,并且存在很多问题需要开发人员在自己的程序解决。hadoop设计的初衷是大规模数据的计算和olap分析,应用场景区别与数据库,因此在HDFS设计时候就侧重在一次写入多次读取。Hadoop的Mapper是怎么从HDFS上读取TextInputFormat数据的 Hadoop中控制文件格式,split方式和record读取方式的类都继承自InputFormat这个抽象类。比如实现每次读取文本文件一行的就是TextInputFormat,这个类进一步使用LineRecordReader进行实际的读取 *** 作。以Hadoop 101为例,在LineRecordReader第97-99行:
newSize = inreadLine(value, maxLineLength,
Mathmax((int)Mathmin(IntegerMAX_VALUE, end-pos),
maxLineLength));
从文本行读取类LineReader in中读取一行写入record的value中。为了一次读取两行,可以将96-106行的while循环再复制粘贴一份在下面。
但是LineReader的readLine函数执行时会首先将value原来的值清空,但是我们读取第二行时不想将第一行的内容清空。因此对LineReader的readLine函数做一点修改:
为了保留原来的readLine函数,我们首先讲这个函数复制粘贴一份在下面,将readLine的函数声明做一点修改,增加是否clear value的判断:
public int readLine(Text str, int maxLineLength,
int maxBytesToConsume, boolean clear) throws IOException {
然后讲123行的strclear();修改为if (clear) {strclear();}
这样,在LineRecordReader的两个while循环中,第一次readLine应为:
newSize = inreadLine(value, maxLineLength,
Mathmax((int)Mathmin(IntegerMAX_VALUE, end-pos),
maxLineLength), true);
你好!很高兴解答你的提问!请你阅读如下提示,排除烦恼。谢谢!
1,光盘放进光盘,夹盘器夹紧光盘,主轴电机带着旋转到一定转数,司服电机推激光头车到近盘心。
2,开激光单元发射激光束照射到光盘反光区最近心圈,探测光盘类型与寻地方式,根据反射回的光
3,束的抖动变化,转换为二进制数据,由译码器变成光驱能读的数据,传递给电脑中央处理器处理。
4,光驱解读出光盘内侧的光盘核心引导数据,确定光盘类型与播放模式,数据头与尾,文件系统。
5,数据排列结构,确定读取光盘形式。从光盘读取到的数据可以是资料,文件,,音乐,影片,
6,命令。光盘的微观结构是螺旋形的,象夏天点的蚊香,密密麻麻排列着肉眼看不见的光轨存数据。
7,顺序读取光盘数据时,激光头沿光盘弦线从内到外作直线运动,完成从内到外读取螺旋形光轨。
8,正好跟蚊香燃烧的顺序相反。最重要的核心数据都在光盘近心圈,所以刮伤近心圈,整盘读不出。
9,就是这个原因,因为引导如何读取光盘的数据都在近心圈,外圈基本存储普通数据,损失小点。
10,如果跳来跳去读光盘数据,就会参照光盘近心圈的导引数据,寻址到真实数据存在的光轨位置。
11,然后读取到所需数据,这样激光头小车就会移来移去发出响声。光盘从内圈到外圈的周长不同,
12,中心圈最短,最外圈最长。每一圈可容纳的数据也是如此,近中心最少,最外圈最多,这样会
13,导致光驱读取到数据的速度会变化,如果为了保持读取数据速度的恒定,就得调节主轴电机的
14,转数,读内圈时要转得快,激光头小车也要移得快,外圈要转得慢,激光头小车也要移得慢。
15,所以我们会听到光盘转动的风噪会有变化,尤其是跳来跳去读存在光盘不同区域的数据时,
16,风噪都会听出区别。当光盘有刮伤时,由于有数据损坏缺失,导致光驱读不下去,于是就会
17,跳回来继续读取,实在读不出原数据,就用CRC32数据冗余机制,加速读取上一段与下一段
18,区域的数据,进行纠错或预测判断来填补缺失的数据,于是主轴电机转速更高,反复读取的
19,风噪就更明显,时快时慢,就是光驱试图通过调节速度来读出数据。光盘记录数据宏观来说
20,是光轨,微观来说,每一位数据都是以物理形式记录的。通常激光在平整的光盘染料面烧蚀
21,出一小坑,代表数据1,而没被烧出坑来的地方就是一小个平面,代表数据0,激光从一个固定
22,的角度入射进坑,与入射到平台,激光的反射与折射的角度与轨迹会发生明显不同。最后回
23,到激光头后,会被折射到光敏元件上,由光信号转换为电脉冲信号,传递给光驱里的译码器。
24,译码器再转换为电脑能识别的资料或命令。光轨就是这样由这样密密麻麻排列的凹坑与平台
25,组成。众多的光轨再排列组成光盘。电脑是处理二进制数据的机器,磁盘,U盘无一不是二进
26,制存储数据的。硬盘是利用磁性原理,有磁无磁代表有无数据。磁极排列走向决定数据0或1。
27,内存利用电容器的电位高低来判断数据0或1,有电无电来判断有无数据。数据总线是以脉冲
28,波的波峰波谷来判断数据0或1,没脉冲波没数据,有脉冲波有数据。闪存也是利用存储单元的
29,电位高低来判断数据0或1,有电势有数据,没电势没数据。人脑的高级指令都得译成机器语言。
30,我们以10进制为计算单位,电脑能接受的数据都是二进制的,所以编程员的工作很辛苦且枯燥。
串口接收中断,接收数据,再判断命令,根据命令的不同来确定下面的 *** 作
*** 作系统是怎么读取硬盘数据的?首先CPU向内存要数据,内存得到指令后向硬盘要数据,硬盘把数据交给内存,内存再交给CPU处理。
plc的主站、从站是怎么从DIO、AIO模块读取或发送数据的 以西门子为例:
PPI通信直接将主从的IO或V区进行通信,可以将AIO的数据放在V存储区中做通信。 例如:将主站IB0数据直接传送到从站QB0。或者主站VB0数据传送到从站VB0当中,做数据交流。
MODBUS通信直接通信V存储区。
读取尺子上的数据的读取用日语怎么说
読み出す 日よみだす
[动]读出,读取
等于 read out
1〔読み始める〕begin to read
2〔コンピュータ内の记忆データを取り出す〕retrieve ((data))
DataTable dt = new DataTable();
dtColumnsAdd(new DataColumn("PreRevDate0", typeof(decimal)));
DataColumn col = new DataColumn();
colColumnName = "PreRevDate1";
colExpression = "ABS(ConvertToInt32(PreRevDate0))";
colDataType = typeof(decimal);
dtColumnsAdd(col);
DataRow dr = dtNewRow();
dr["PreRevDate0"] = -1;
dtRowsAdd(dr);
Hadoop中控制文件格式,split方式和record读取方式的类都继承自InputFormat这个抽象类。比如实现每次读取文本文件一行的就是TextInputFormat,这个类进一步使用LineRecordReader进行实际的读取 *** 作。以Hadoop 101为例,在LineRecordReader第97-99行:
newSize = inreadLine(value, maxLineLength,
Mathmax((int)Mathmin(IntegerMAX_VALUE, end-pos),
maxLineLength));
从文本行读取类LineReader in中读取一行写入record的value中。为了一次读取两行,可以将96-106行的while循环再复制粘贴一份在下面。
但是LineReader的readLine函数执行时会首先将value原来的值清空,但是我们读取第二行时不想将第一行的内容清空。因此对LineReader的readLine函数做一点修改:
为了保留原来的readLine函数,我们首先讲这个函数复制粘贴一份在下面,将readLine的函数声明做一点修改,增加是否clear value的判断:
public int readLine(Text str, int maxLineLength,
int maxBytesToConsume, boolean clear) throws IOException {
然后讲123行的strclear();修改为if (clear) {strclear();}
这样,在LineRecordReader的两个while循环中,第一次readLine应为:
newSize = inreadLine(value, maxLineLength,
Mathmax((int)Mathmin(IntegerMAX_VALUE, end-pos),
maxLineLength), true);
第二次readLine应为:
newSize = inreadLine(value, maxLineLength,
Mathmax((int)Mathmin(IntegerMAX_VALUE, end-pos),
maxLineLength), false);
搞定。
在计算机中CPU是通过数据总线与内存交换数据的CPU与内存交换数据是通过前端总线完成的,前端总线也是数据总线的一种。
这个flash是怎么读取的数据?先看一下效果嘛
不是很容易,但是推荐一些Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括,YARN, Hcatalog, Oozie, Cassandra, Hama, Whirr, Flume, Bigtop, Crunch, Hue等。一、学习路线图
Hadoop家族学习路线图 开篇必读
Hive学习路线图
Mahout学习路线图
二、编程实践
Hadoop历史版本安装
用Maven构建Hadoop项目
Hadoop编程调用HDFS
用Maven构建Mahout项目
Mahout推荐算法API详解
用MapReduce实现矩阵乘法
从源代码剖析Mahout推荐引擎
Mahout分步式程序开发 基于物品的协同过滤ItemCF
Mahout分步式程序开发 聚类Kmeans
PageRank算法并行实现
三、案例分析
海量Web日志分析 用Hadoop提取KPI统计指标
用Hadoop构建推荐系统
用Mahout构建职位推荐引擎
Mahout构建图书推荐系统
PeopleRank从社交网络中发现个体价值虽然从事Hadoop方面工作,但是不是高手,毕竟只有一年经历而已。
分享下本人的学习经历吧。
了解Hadoop运行机制,可以学习Hadoop权威指南或者Hadoop实战;
了解Hadoop运行流程,看懂HADOOP_HOME/bin/下面主要执行脚本。
查看core-defaultxml/hdfs-defaultxml/mapred-defaultxml等默认配置
文件,及core-sitexml/hdfs-sitexml/mapred-sitexml等相关文件,学会
如何进行参数优化,以及掌握如何配置读取压缩文件,默认的gzip,及
自定义的lzo,学会自定义Combiner/Patitioner等,掌握各种输入输出
格式的区别及应用场景,学会自定义输入输出格式,其次学习MapReduce算法,
比如In-Map-Combing,相对频度计算,Pairs算法,Strips算法等。掌握好
mapreduce编程。
在这其中,需要好好阅读HADOOP_HOME/src/目录下的Hadoop源码,
这个就是开源最大的好处。说的比较乱,但是就凑合着借鉴下吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)