Spark+hadoop+mllib及相关概念与操作笔记

Spark+hadoop+mllib及相关概念与操作笔记

作者:

lw

版本:

0.1

时间:

2016-07-18

1、调研相关注意事项

a) 理解调研

调研的意义在于了解当前情况,挖掘潜在的问题,解决存在的疑问,并得到相应的方案。

b) 调研流程

首先明确和梳理现有的疑问是什么,要通过调研解决什么问题,然后再去做调研,发现问题,再解决问题。

c) 调研成果

最终需要得到结论与方案,以及详尽的论证理由,让别人信服。

d) 书写格式

版本与作者以及时间可以以表格的形式,整齐明了。

结论简洁明了,论证理由详尽写在后面。

2、Linux常见命令

a) Locate 参数

Locate 可能查找不到最新添加的文件,因为它从数据库中找,有的时候没有更新就找不到。

locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。

b) 查看系统版本

Uname -a:显示电脑及操作系统的相关信息

cat  /proc/version:说明正在运行的内核版本

cat  /etc/issue:显示的是发行版本的信息

lsb_release -a(适用于所有的linux,包括RedhatSuSEDebian等发行版,但是在debian下要安装lsb)

3、Linux环境变量的设置

Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量。

a) 系统级:

/etc/profile:用于交互的Login shell,交互式shell的环境变量。执行bashrc此文件为系统的每个用户设置环境信息,当第一个用户登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.

/etc/bashrc:非交互式shell的环境变量。为每一个运行bash shell的用户执行此文件.bash shell被打开时,该文件被读取。有些linux版本中的/etc目录下已经没有了bashrc文件。

/etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile,设置环境文件的环境变量。

b) 用户级(这些文件处于家目录下)

~/.profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。这里是推荐放置个人设置的地方

~/.bashrc:该文件包含专用于你的bash shellbash信息,当登录时以及每次打开新的shell,该文件被读取。

~/.bash_profile ~./bash_login:如果有则不读取.profile( ~/.bash_profile or ~./bash_login - If one of these file exist, bash executes it rather then "~/.profile" when it is started as a login shell. (Bash will prefer "~/.bash_profile" to "~/.bash_login"). However, these files won't influence a graphical session by default.)

~/.pam_environment:用户级的环境变量设置文件,没有做测试,不知道管不管用。

想对所有的用户生效,那就需要设置系统级的环境变量。反之,需要修改用户级的文件(最好是修改.profile文件,理由上面已经讲了)。

c) 生效

Source ~/.profile

4、Hadoop基本命令

Hadoop文件系统命令:hadoop fs -linux命令 参数

Eg: [root@master ~]# hadoop fs -ls /

Eg: [root@master ~]# hadoop fs -cat /lwtest/lw.txt

其中fsfileSystem,然后 - 后面接一般的linux指令就行,即hadoop文件系统的操作和linux文件系统的操作基本上一致,这样不用浪费时间去记很多命令了。

5、相关概念

Hbase:分布式、面向列的开源数据库

YarnHadoop资源管理器,可以为上层应用提供统一的资源管理和调度,提高资源利用率及方便数据共享

6、Spark集群

a) 命令:clush -a -b jps 显示当前运行的服务进程

b) Spark集群部署方式

参考:

http://www.cnblogs.com/liuyifeng/p/5690627.html

http://www.aboutyun.com/forum.php?mod=viewthread&tid=7115

MR:离线计算框架

Storm:实时计算框架

Spark:内存计算框架

i. Standalone

分别在集群的每台机器安装Spark,再启动相应的masterslave

 

ii. Spark On Mesos

iii. Spark On Yarn

使用Spark客户端向yarn提交任务运行。

部署方式:

1.spark部署包放到yarn集群某个节点上面

2.yarn客户端读取yarn集群配置文件,在此过程中,sparkmasterslave节点不需要启动

Ps:Yarn(淘宝团队) Mesos(豆瓣)

 

c) Hadoop web控制台端口

nameNodeIP:端口

Eg:

10.3.9.135:8088 Hadoop资源管理

10.3.9.135:50070 HDFS文件管理,节点信息

http://10.3.9.135:50070/explorer.html#/ 可以查看文件

参见:

http://www.cnblogs.com/laov/p/3433994.html

http://www.cnblogs.com/ggjucheng/archive/2012/04/17/2454590.html

帮助理解:

图:Hadoop分布图

图;Hadoop HDFS文件浏览

图:Hadoop常用端口

d) Spark例子运行

./bin/run-example SparkPi 10

./bin/spark-shell --master local[2]

The --master option specifies the master URL for a distributed cluster, or local to run locally with one thread, or local[N] to run locally with N threads. You should start by using local for testing. For a full list of options, run Spark shell with the --help option.

--master选项指定master url 为一个分布式集群还是本地单线程的,或者local[N]本地N线程的。你应该开始使用本地测试,运行Spark shell --help选项。

e) Mllib例子运行

./bin/run-example mllib.JavaKMeans mllibTestData/kmeans_data.txt 3 100

mllib.JavaKMeans为相应的机器学习程序,是mllib文件夹下的JavaKMeans,后面三个是数据集 及相应参数。这里是K均值算法,后面3表示K的大小,100表示迭代次数。

f) Job提交

参考:http://spark.apache.org/docs/latest/submitting-applications.html

# 本地8线程运行应用

# Run application locally on 8 cores

./bin/spark-submit

  --class org.apache.spark.examples.SparkPi

  --master local[8]

  /path/to/examples.jar

  100

Eg:./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local[2] ./lib/spark-examples-1.6.1-hadoop2.7.1.jar 10

# 单集群

# Run on a Spark standalone cluster in client deploy mode

./bin/spark-submit

  --class org.apache.spark.examples.SparkPi

  --master spark://207.184.161.138:7077

  --executor-memory 20G

  --total-executor-cores 100

  /path/to/examples.jar

  1000

# Run on a Spark standalone cluster in cluster deploy mode with supervise

./bin/spark-submit

  --class org.apache.spark.examples.SparkPi

  --master spark://207.184.161.138:7077

  --deploy-mode cluster

  --supervise

  --executor-memory 20G

  --total-executor-cores 100

  /path/to/examples.jar

  1000

#Spark on Yarn的集群上提交应用 (目前的集群)

#Run on a YARN cluster

export HADOOP_CONF_DIR=XXX

./bin/spark-submit

  --class org.apache.spark.examples.SparkPi

  --master yarn

  --deploy-mode cluster   # can be client for client mode

  --executor-memory 20G

  --num-executors 50

  /path/to/examples.jar

  1000

Eg:

[root@master spark-1.6.1]#

./bin/spark-submit  

--class  org.apache.spark.examples.SparkPi  

--master yarn  

--deploy-mode cluster  

./lib/spark-examples-1.6.1-hadoop2.7.1.jar  

10

其中SparkPi是通过蒙特卡罗思想就Pi的算法,10为其参数,大概指的是在单位为10的一个正方形里,正方形里包含一个半径为5的圆,然后生成随机数,均匀分布,数点落在圆里的数及全部的点数,通过面积的比例等于随机数分布的比例来求得Pi.

--deploy-mode cluster Yarn集群中需要指定。

g) 结果查看

参考:

http://www.360doc.com/content/14/0810/12/7853380_400765442.shtml

http://www.iteblog.com/archives/1028

System.out.println("Pi is roughly " + 4.0 * count / n);

yarn上运行,程序默认输出直接输出到logs里面。

Yarn logs -applicationId xxx 可以查看运行结束的Application日志

Eg:

yarn logs -applicationId application_1467954918322_0037

输出:

…省略…

LogType:stdout

Log Upload Time:星期一 七月 25 11:18:59 +0800 2016

LogLength:23

Log Contents:

Pi is roughly 3.141328

End of LogType:stdout

…省略…

当然可以将结果输出到文本里面,代码:

counts.saveAsTextFile("/home/wyp/result");

或者:

counts.saveAsHadoopFile("/home/wyp/result",

                                Text.class,

                         IntWritable.class,

                   TextOutputFormat.class);

将结果存储到HDFS上的/home/wyp/result文件夹里,第一种输出格式是(key,value,第二种输出格式为key value.

我们可以根据自己的需要定义一个自己的输出格式,而且我们在输出的时候如果文件比较大,还可以指定输出文件的压缩方式。

h) 日志

hdfs dfs -ls /tmp/logs/root/logs/tmp/logs/root/logs/application_1467954918322_0059

Hadoopspark应用日志存在/tmp/logs/root/logs/tmp/logs/root/logs/下面。每个应用id对应一个目录,里面有在不同节点上跑的日志的相应记录。同Yarn logs -applicationId xxx 所看到的信息。

7、Maveneclipse

a) 安装Maven

http://dead-knight.iteye.com/blog/1841658

  1. 安装maven,并设置环境变量(网上有的是)
  2. 查看配置是否完成。mvn -v 出现版本信息,表示配置成功
  1. 设置仓库位置

 

默认的maven仓库位置为:C:UsersAdministrator.m2(其中Administrator为当前账号)

仓库是用来存Maven运行时的一此插件的。比说archetyper的插件。

b) Eclicpse安装maven插件

Maven插件下载:http://pan.baidu.com/s/1i5weBZZ

解压后,把linksmyplugins文件夹放到eclipse安装目录下,如下图所示:

 

并且修改links下的maven.link文件。指向myplugins目录即可。我的配置为:

path=F:/android/adt-bundle-eclipse/eclipse/myplugins/maven

重启eclipse

选择window->preferences->maven,如下图所示:

 

 

继续选择“User Settings”,配置mavensetting文件,如下图所示:

 

好,此时maven插件安装完毕。

c) 查看mavenconsole

d) 注意事项

Maven-archetype-quickstartmaven-archetype-profiles结构是一样的,即profiles即为quickstart.

e) 错误处理

i. Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart

解决方式:

  1. http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.1/maven-archetype-quickstart-1.1.jar下载最新版maven-archetype-quickstart-1.1.jar
  2. 命令行到下载目录下执行mvn install:install-file -DgroupId=org.apache.maven.archetypes -DartifactId=maven-archetype-quickstart -Dversion=1.1 -Dpackaging=jar -Dfile=maven-archetype-quickstart-1.1.jar

出现BUILD SUCCESS则表示安装成功了,就可以通过eclispequickstart结构的工程了。如下图所示:

f) Pom.xml红叉

http://www.cnblogs.com/mymelody/p/5616685.html 

  1. dependency格式不对,或者jar包没有,使得对应的包没有下载下来
  2. eclipse没有自己下载,出现missing情况

解决方法:

  1. 找到我们的本地maven仓库目录比如我的D:javamymaven
  2. 搜索出该目录下的*lastUpdated.properties文件并删除,如下图所示,可以通过模糊搜索匹配出这样的文件
  1. Maven 更新当前项目,maven就会继续下载缺失的依赖jar包,直至缺失jar包下载完成,上述问题就解决了。

g) 远程仓库

参考:http://www.cnblogs.com/dingyingsi/p/3856456.html 

仓库:

http://repo2.maven.org/maven2/

http://uk.maven.org/maven2/

http://maven.apache.org

Other

https://repository.jboss.org/nexus/content/repositories/releases/

http://repository.jboss.org/nexus/content/groups/public/

8、遇到错误

9、数据接入

http://blog.csdn.net/woshiwanxin102213/article/details/17584043

http://www.csdn.net/article/2015-02-13/2823955?ref=myread

Hive:是建立在Hadoop上的数据仓库基础构架。所有Hive数据都存储在Hadoop兼容的文件系统中(例:Amazon S3HDFS)中。Hive在加载数据过程中不会对数据进行任何修改,只是将数据移动到HDFSHive设定目录下,因此,Hive不支持对数据的改写和添加。

HBase:分布式面向列的开源数据库。不同于一般的关系数据库,它适用于非结构化存储数据库。

JDBC:关系型数据库方访问API,可以访问多种数据库

Spark SQL:摆脱了对Hive的依赖,兼容Hive,可以从RDDPARQUET文件、JSON文件中获取数据。

http://www.cnblogs.com/shishanyuan/p/4723604.html?utm_source=tuicool

http://www.csdn.net/article/2015-04-03/2824407

http://www.cnblogs.com/gaopeng527/p/4315808.html

内部:

http://developer.51cto.com/art/201603/507668.htm

RDD(Resilient Distributed Datasets)弹性分布式数据集

DataFrame:是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格,被用于SQLContext相关操作。

DataSetDataset可以认为是DataFrame的一个特例,主要区别是Dataset每一个record存储的是一个强类型值而不是一个Row

a) Spark sql连接mysql

  1. 下载mysql-connector-java-5.1.39-bin.jar http://www.itcast.cn/news/20151229/16012088060.shtml

10、HBase

a) Hbase shell

./hbase shell 进入 hbase shell.

http://www.cnblogs.com/heyCoding/archive/2012/11/09/2762334.html

scan ‘CityWeather’ , {VERSION => 10}

注意VERSIONVERSIONS的区别,一个是指定版本,一个是列出几个版本。

11、算法运行及结果

a) linear regression(线性回归)

i. JavaHdfsLR <file> <iters>

javaHdfsLR<文件><迭代次数>

本地:

./bin/spark-submit  --class  org.apache.spark.examples.JavaHdfsLR  --master local ./lib/spark-examples-1.6.1-hadoop2.7.1.jar  mllibTestData/lr_data.txt 1

集群:

./bin/spark-submit  --class  org.apache.spark.examples.JavaHdfsLR  --master yarn --deploy-mode cluster ./lib/spark-examples-1.6.1-hadoop2.7.1.jar  mllibTestData/lr_data.txt 1

结果:

LogType:stdout

Log Upload Time:星期一 七月 25 16:46:12 +0800 2016

LogLength:442

Log Contents:

Initial w: [0.4551273600657362, 0.36644694351969087, -0.38256108933468047, -0.4458430198517267, 0.33109790358914726, 0.8067445293443565, -0.2624341731773887, -0.44850386111659524, -0.07269284838169332, 0.5658035575800715]

On iteration 1

Final w: [246.25860765580322, 270.70869288178557, 371.354007739464, 357.4478152969409, 261.9494718512335, 210.01734831542458, 366.7061915626602, 381.34754796597383, 335.20416843810943, 240.24079035615807]

End of LogType:stdout

ii. JavaLR <input_dir> <step_size> <niters>

JavaLR<输入文件><步长大小><迭代次数>

./bin/spark-submit  --class  org.apache.spark.examples.mllib.JavaLR  --master yarn --deploy-mode cluster ./lib/spark-examples-1.6.1-hadoop2.7.1.jar  mllibTestData/lr-data/random.data 1 10

结果:

LogType:stdout

Log Upload Time:星期一 七月 25 17:03:14 +0800 2016

LogLength:47

Log Contents:

Final w: [0.6262094779767464,0.535113798652265]End of LogType:stdout

原文地址:https://www.cnblogs.com/lwhp/p/5754023.html