mac spark+hive+hadoop 数据分析环境搭建(单机简版)
apache产品下载地址:
mysql5.6 brew方式安装配置:
Icon
mysql做为元数据存储使用。
brew search mysql
brew install mysql@5.6
配置mysqlhome:
export MYSQL_HOME=/usr/local/opt/mysql@5.6
启动mysql:
$MYSQL_HOME/bin/mysql.server start
$MYSQL_HOME/bin/mysql -uroot (root用户登录,5.6默认root用户无密码)
重置root密码:
bogon:~ meicai$ $MYSQL_HOME/bin/mysql.server stop
bogon:~ meicai$ bash mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
bogon:~ meicai$ mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('新密码') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit;
元数据hive用户配置:
insert into mysql.user(Host,User,Password) values("localhost","hive",password("hive")); 用这个 create user 'hive'@'%' identified by 'hive';
(insert 创建会提示很多字段没有默认值,可以在客户端复制行创建,然后参考重置root密码去重置hive用户密码,可以直接 select * from mysql.user 查询所有用户)
创建hive用户:
create database hive;
grant all on hive.* to hive@'%' identified by '密码';
grant all on hive.* to hive@'localhost' identified by '密码';
flush privileges;
show grants for hive@'localhost'; (查看权限)
验证hive用户:
mysql -uhive -phive (若报错Access denied for user***,按照 上面描述的 重置root密码 方法处理)
show databases;
mysql卸载:
brew卸载命令 :brew unstall mysql版本号;建议同时执行安装包卸载命令。
安装包安装卸载方式:
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/var/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
vim /etc/hostconfig and removed the line MYSQLCOM=-YES-rm -rf ~/Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*
5.7版本修改 mysql 密码策略:(5.6默认貌似没有限制)
show variables like 'validate_password%';
set global validate_password_policy=0;
set global validate_password_length=1;
报错处理:
用户登录时报错误信息 Access denied for user '用户名'@'localhost' ,按照 上面描述的 重置root密码 方法处理。
hive 安装配置:
Icon
hive是构建在hadoop HDFS之上的一个数据仓库;
hive可以用来进行数据的抽取转换和加载(ETL);
hive定义了类似sql的语言,称为hsql;
hive允许开发人员开发自定义的mapper和reducer程序来处理內建的mapper和reducer无法完成的复杂分析;
hive是一个sql解析引擎,它将sql语句转化成M/R job然后在hadoop执行;
hive的表其实就是 HDFS的目录/文件;
hive将元数据存储在数据库中,支持mysql derby等数据库,hive元数据包括 表名 表列 分区 表的属性(是否为外部表) 表数据所在目录等信息;
spark使用时需要mysql作为元数据的存储介质,元数据配置在hive-site.xml中。
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,
用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。元数据是关于数据的组织、数据域及其关系的信息,简言之,元数据就是关于数据的数据。
1.下载apache-hive-1.2.2-bin.tar.gz地址:http://mirror.stjschools.org/public/apache/hive/hive-1.2.2/
2.解压后重命名文件夹hive-1.2.2
(此时无需任何配置即可启动,需注意:由于使用mysql本地模式配置,不建议解压后直接尝试 执行hive命令启动,会默认使用derby库嵌入模式启动,
在启动文件夹中自动创建metastore_db目录 影响后续mysql本地模式配置。)
3.添加环境变量
export HIVE_HOME=/**/hive-1.2.2
4.创建hive-site.xml
cp hive-1.2.2/conf/hive-default.xml.template hive-1.2.2/conf/hive-site.xml
5.拷贝mysql-connector-java-5.1.26-bin.jar (百度下载) 到hive 的lib下面
6.把jline-2.12.jar拷贝到hadoop /share/hadoop/yarn/lib/目录下,替代jline-*.jar,替换前做好备份.
(JLine 是一个用来处理控制台输入的Java类库)
7.1配置 hive-site.xml
hive.metastore.warehouse.dir
/usr/local/opt/hive/warehouse
hive.metastore.local
true
javax.jdo.option.ConnectionURL
jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
hive
javax.jdo.option.ConnectionPassword
密码
7.2配置 hive-env.sh 添加如下配置:
export HADOOP_HEAPSIZE=1024
HADOOP_HOME=${HADOOP_HOME} (此处需安装hadoop后配置环境变量)
export HIVE_CONF_DIR=/**/hive-1.2.2/conf
export HIVE_AUX_JARS_PATH=/**/hive-1.2.2/lib
需要再执行:./schematool -initSchema -dbType mysql
8.测试
注意!需要先修改mysql字符集 否则对hive库表操作后续都会有问题:
mysql> set character_set_database=latin1;
set character_set_server=latin1;
$ cd /hive-1.2.2/bin
$ hive
(启动时报错Resources are low on NN. Please add or free up more resources then turn off safe mode manually.
根据提示需要执行 hdfs dfsadmin -safemode leave 解决)
hive> show databases;
OK
customer_center
default
Time taken: 1.172 seconds, Fetched: 2 row(s)
9.本地开发需要创建必要的库和表并导入适量数据。
建表导数据时候报错:
message:For direct MetaStore DB connections, we don't support retries at the client level.
这是由于字符集的问题,需要配置MySQL的字符集:
mysql> set character_set_database=latin1;
set character_set_server=latin1;
10.关于本地导入数据的说明
ETL系统里的建表语句最后一行是 (ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';)
本地建表时需要把 '\t' 改为 ',' 因为csv格式数据 是 逗号分隔的。
导入脚本:load data local inpath '/Users/meicai/Downloads/**.csv' overwrite into table `表名`;
本地导出脚本:hive -e "insert overwrite local directory '/Users/meicai/Downloads/**.csv' row format delimited fields terminated by ','
建库建表后可在mysql的hive数据库中查看到元数据信息,说明正确配置使用。
hadoop 单机配置:
Icon
下载hadoop-2.7.2.tar.gz
主要可参见配置文档中的core-site.xml;hdfs-site.xml;mapred-site.xml;yarn-site.xml 配置。
本地免密登录配置(重要):
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
环境变量配置:
export HADOOP_HOME=/**/hadoop-2.7.2
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
namenode节点格式化:
$HADOOP_HOME/bin/hdfs namenode -format
必须执行hdfs名称节点格式化 (重新格式化意味着集群的数据会被全部删除)
namenode和datanode 的dir位置已经在 hdfs-site.xml 中配置
启动hadoop:
$HADOOP_HOME/sbin/start-all.sh
访问地址测试是否已经启动:http://localhost:50070
关闭hadoop:
$HADOOP_HOME/sbin/stop-all.sh
报错/bin/bash: /bin/java: No such file or directory解决方式:
spark 安装配置:
Icon
下载spark-2.1.0-bin-hadoop2.7.tgz
spark是scala写的,运行在JVM上,运行环境需要java7+以上;下载安装需要时hadoop兼容的版本 如spark-2.1.0-bin-hadoop2.7.tgz;
spark的shell能够处理分布在集群上的数据,spark把数据加载到节点的内存中 使分布式处理数据快速完成,spark的shell可以快速完成迭代式计算 实时查询和分析。
spark 提供python shell(bin/pyspark) 和scala shell (/bin/spark-shell),本公司使用 scala shell。
spark的安装下载压缩包解压即可;
配置环境变量:
export SPARK_HOME=/**/spark-2.1.0-bin-hadoop2.7
重要配置:
Configuration of Hive is done by placing your hive-site.xml, core-site.xml (for security configuration), and hdfs-site.xml (for HDFS configuration) file in conf/.
(hive配置文件hive-site.xml,hadoop配置文件core-site.xml hdfs-site.xml 需要拷贝到 spark conf/文件夹下)
可以运行hadoop测试类 测试是否正确配置:
hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount /slaves /output
使用spark操作hive库时候 需要设置 metastore 服务后台运行:
nohup ./hive --service metastore &
hadoop与spark比较:
hadoop应用场景 离线处理 对时效性要求不高
spark应用场景 时效性要求高的场景 机器学习等领域 迭代计算等场景 因为基于内存
spark不具有HDFS的存储能力 要借助HDFS等持久化数据
IDEA安装scala插件:
![0](https://wiki.sprucetec.com/download/attachments/10457780/image2017-8-1%2014%3A24%3A55.png?version=1&modificationDate=1501568689000&api=v2)
![0](https://wiki.sprucetec.com/download/attachments/10457780/image2017-8-1%2014%3A25%3A52.png?version=1&modificationDate=1501568747000&api=v2)
customer-analysis项目配置:
1.config配置,参数 --task 是任务名 ,配置需要执行的任务,暂时有三个任务 Retention,CustomerComplain,CommodityInterest 执行哪个配哪个。
具体线上执行配置在http://deploy.data-platform.yunshanmeicai.com/查询,线上有两个 retentionrate-analysis 和 commodityInterest-analysis 在应用列表里查询。
![0](https://wiki.sprucetec.com/download/attachments/10457780/image2017-8-1%2014%3A31%3A46.png?version=1&modificationDate=1501569101000&api=v2)
2.代码方面需要注意:sparkSession在RDDManager类中创建,
RDDManager
//本地调试配置:
private[service] val _spark = SparkSession.builder().appName("customer-analysis")
.config("hive.exec.dynamic.partition", "true")
.config("hive.exec.dynamic.partition.mode", "true")
.config("hive.metastore.uris", "thrift://localhost:9083")
.config("spark.master", "local")
.enableHiveSupport()
.getOrCreate()
//线上配置:
private[service] val _spark = SparkSession.builder().appName("customer-analysis")
.config("hive.exec.dynamic.partition", "true")
.config("hive.exec.dynamic.partition.mode", "nonstrict")
.enableHiveSupport().getOrCreate()
|
3.本地开发需要的启动项较多,可以配到脚本里启动,如:
startSparkEnv.sh
#!/bin/sh
#每次启动时 让配置的环境变量生效:
source ~/.bash_profile
#关闭mysql:
$MYSQL_HOME/bin/mysql.server stop
#启动mysql:
$MYSQL_HOME/bin/mysql.server start
#关闭hadoop
$HADOOP_HOME/sbin/stop-all.sh
#启动hadoop
$HADOOP_HOME/sbin/start-all.sh
#启动hive metastore
hive --service metastore &
if [ $? -eq 0 ]; then
echo "------------- startSparkWork success"
else
echo "------------- startSparkWork fail"
exit 1
fi
|
scala教程: