构建spark
标签:大数据
花了299在天善学院买了玩转大数据分析的教程。虽然名字是一分钟建立,但那仅仅是在centos单机上安装spark,离建立hadoop、spark、hive三位一体的集群环境差距还不是一点点。下面记录的是通过vagrant建立虚拟机,安装这三位大佬的过程。
单机安装spark环境的步骤如下:
下载vagrant和virtualbox,两者用于建立centos7虚拟机。
vagrant建立虚拟的优势
在Windows环境下,使用powershell作为命令行工具。
命令如下:
vagrant init centos/7
vagrant up 第一次将下载centos
sudo yum update
sudo yum install java-1.8.0-openjdk
curl -O spark的下载地址
tar zxvf
bin/pyspark 即可运行spark
例子: rdd=sc.parallelize([1,2,3,4,5])
rdd.map(lambda x:x+1).reduce(lambda x,y:x+y) -->20
查看ip需要先:sudo yum install net-tools
安装集群,修改vagrantfile即可,可方便的获得虚拟机集群
建立Hadoop环境:
- 下载Hadoop、Hive、Spark相应版本的文件,将相关命令(yum update等)写入bootstrap.sh执行,具体包括:yum update、yum java,sshkey,tar,mv,cp文件等,修改文件路径等。
在bootstrap.sh中,自作聪明的将/vagrant/files/等路径的vagrant删掉了,以为对应windows下的files目录,实际上vagrant的工作方式是将windows下.vagrant路径映射到虚拟机的/vagrant/目录下。试图通过将bootstraop.sh复制到虚拟机运行,可实际上少了./vagrant的映射,不能运行成功,只有重新删掉up。 - 设定 ssh key
• 将master的 id_rsa.pub 复制到其他机器的 ~/.ssh/authorized_keys/
注意:这里花了一点时间,多次将集群彻底删除重装,私钥不能删除,删除了就连vagrant也访问不了node了
公钥验证不通过,需要在要登录的机器(./etc/ssh/sshd_config) RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
在master机第一次通过密码登录,然后ssh-copy-id -i ~/.ssh/id_rsa.pub <romte_ip>将master机的rsa.pub复制到目标机的authorized_keys。参考http://www.jb51.net/article/94599.htm - 启动 Hadoop
• hdfs namenode -format 建立hdfs文件夹
• $HADOOP_PREFIX/sbin/start-dfs.sh 开启dfs,登录各个node验证
hdfs dfsadmin -report 显示各node的使用情况
• $HADOOP_PREFIX/sbin/start-yarn.sh
查看hadoop开启的port:netstat -nlopt
http://10.211.55.100:50070/ 在web端查看hadoop启动情况
建立Spark集群
开启spark前应开启hadoop,因为多次hdfs namenode -format导致namespaceID不同(所以一旦format,就不应重复,否则因为删除datanode会丢失数据),
Configured Capacity: 0 (0 B)
Present Capacity: 0 (0 B)
DFS Remaining: 0 (0 B)
DFS Used: 0 (0 B)
DFS Used%: NaN%
解决方法是:删掉所有节点/var/hadoop目录下的hadoop-datanode和hadoop-namenode两个文件夹。
spark configconfiguration:
spark-env.sh (设定环境变项)
spark-defaults.conf (细节设定)
启动spark(standalone模式):
- 設定 Slaves vi /usr/local/spark/conf/slaves 查看slaves
- $SPARK_HOME/sbin/start-all.sh
pyspark --master spark://10.211.55.100:7077
http://10.211.55.100:8080/ 在web端查看
在执行上局的时候,报错java.io.FileNotFoundException: File does not exist: hdfs:/user/spark,经过思考,应该是hdfs系统没有这个文件夹,那么使用 hadoop fs -mkdir /user/spark建立这个文件夹。解决!
建立Hive(Hadoop上的资料管理系统)
Hive是Hadoop家族中一款数据仓库产品,
Hive最大的特点就是提供了类SQL的语法,封装了底层的MapReduce
Hive安装模式:embedded metastore、local mode、remote mode
安装Hive -remote Mode 步驟:
- 安裝 mySQL, mySQL connector
systemctl start mysqld(开启mysql)
cat /var/log/mysqld.log | grep password(查询密码,以便登录)
mysql -u root -p(使用查询到的密码登录)
ALTER USER 'root'@'localhost' IDENTIFIED BY '!Spark123';(修改密码) - 設定 hive-site.xml
vi /usr/local/hive/conf/hive-site.xml 修改刚刚确定的密码 - 初始化 mySQL
schematool -initSchema -dbType mysql 根据hive-site.xml的设置找到mysql的位置,初始化mysql
mysql -u root -p登录 show databases 显示数据库 use metastore; show tables
重要的table:DBS 新开的database的信息;DB_PRIVS 使用者权限;PARTITIONS方便Hive快速提取;TBLS新创的表格 - 啟動Hive的 metastore
hive --service metastore 没有退出ctrl+c后执行下局(如果进入hive失败,改为:hive --service metastore &)
nohup hive --service metastore &
head nohup.out 查看日志,已经开启metastroe
netstat -nlopt 查看metastore的端口,存在9083表示开启
hive 进入hive环境。(语句加分号)show tables 查看表格;show databases 查看数据库
create database temp;
use temp;
create table test1(id string,number int);
insert into table test1 VALUES('001',1),('002',2);
select * from test1
insert时总是失败,报错FAILED: SemanticException [Error 10293]: Unable to create temp file for insert values File。第二天重做了一遍hadoop,spark,正常运行,估计是因为hive --service metastore &没有开启
建立spark与hive的连接,使用spark.sql运行hive语句
ln -s /usr/local/hive/conf/hive-site.xml /usr/local/spark/conf 在spark的conf下建立hive-site.xml的软链接(link)。
pyspark --master local[1] 使用本地模式快速开启spark
spark.sql('show databases').collect()
spark.sql('select * from test1').show() 注意:test1在使用时没有use temp(databases)所以这里没有from temp.test1
建立交互式Pyspark环境
ipython Notebook 简介
- 以 Web 的方式提供使用者操作 Python
- 可以远端操作 Server 上的资料及环境
- 提供基本 code completion,提示等功能
安装过程:
- pip install ipython notebook 安裝 ipython notebook (ipython notebook对root模式排斥)
- cp /vagrant/conf/spark/0_spark.py ~/.ipython/profile_default/startup/ 將設定檔放入
ipython notebook --ip 0.0.0.0 启动ipython复制出现的网址到浏览器-0.0.0.0改为master的ip(或者直接填写master ip)
附
Hadoop常用命令:
• 管理UI: http://10.211.55.100:50070
• 列出档案: hadoop fs -ls /
• 建立资料夹: hadoop fs -mkdir
• 将资料上传到 Hdfs: hadoop fs -put <source> <dest>
• 将资料从 Hdfs 传到本机: hadoop fs -get <remote> <local>
• 将资料在 Hdfs 中移动: hadoop fs -mv <source> <dest>
• 删除 Hdfs 资料: hadoop fs -rm <file>
• 观察档案内容: hadoop fs -cat/-tail <file>
vagrant常用命令
• init 建立 Vagrant File
• up 建立虚拟机(或开机)
• ssh 进入虚拟机
• status 观察虚拟机状态
• halt 关机
• destroy 删除虚拟机
• suspend 暂停虚拟机(类似休眠)
• resume 唤醒虚拟机
ipython notebook 一般操作方式
• Enter: 进入编辑此格内容(编辑模式)
• Esc: 从编辑模式回到命令模式
• Shift + Enter: 运行此格,并跳至下一格
• Alt + Enter: 运行此格,并在下方新增一格
• Ctrl + Enter: 运行此格
• Y: 切换成 Code 模式(在命令模式下)
• M: 切换成 Markdown模式(在命令模式下)
• 上下方向键: 上下移动选择格
• Command + s (for Mac): 储存档案
• Ctrl + s (for window): 储存档案
• %matplotlib inline
• %%timeit 测试时间
• %history 历史纪录
• !执行 shell command