Hadoop框架中最核心的设计就是:MapReduce和HDFS。MapReduce的思想是分而治之(任务的分解与结果的汇总)。HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。
Python开发常见问题
Sqoop使用笔记
JVM学习笔记(一)走近Java
《深入理解Java虚拟机》读书笔记
MyEclipse常用插件
Ne04j单机版和集群版部署
Neo4j图数据库学习笔记
Python并行编程笔记
大数据时代,并发/并行是不变的话题,以并行计算来提高程序运行效率,可充分利用硬件资源(CPU,内存,磁盘/网络IO)。Python作为脚本语言,解释器简洁轻量,软件研发后无需编译且更新部署方便,对于实现一些类似爬取的工具十分友好。
搭建Python工程化开发框架
2016的元月以python作为开端。
采用python进行网络数据聚合抽取,需调研并搭建python工程化开发框架,几番迭代,一个适用于数据采集的开发环境搭建完成:
- 开发环境:python2.7.10 32位/pycharm5
- 项目构建:virtualenv/virtualenvWrapper 虚拟运行环境;pip 依赖项管理;pyBuilder项目构建,其中pyBuilder以disutils用于项目打包
- 项目文档:mkdocs/sphinx;参考python-guide-writing
- Web框架:Tornado/web,py(非阻塞式web服务器,精简);django(文档功能齐全,但生态封闭)
- 单元测试:unittest/coverage(测试覆盖率统计)
- 并行框架:gevent(多线程)+monkey patch(运行时动态替换模块),multiprocessing(多进程)
- 爬虫框架:scrapy/selenium
- 接口设计: zope.interface
- 编码风格:google-python-styleguide
MongoDB集群学习笔记
MongoDB权限配置
MongoDB3离线部署
MongoDB空间分析
MongoDB常用脚本
CentOS配置本地Yum源
Samba安装配置笔记
Hive学习笔记
最近处理一个ETL的项目,技术选型是CDH的Hadoop方案,理所当然离不了Hive数据仓库,记录下Hive学习路上的点滴。
MyEclipse安装MapReduceTools插件
Windwos10开发环境测试MapReduce程序,需自行编译hadoop2x-eclipse-plugin,生成MyEclipse2014的MapReduceTolls插件,可结合MRUnit进行单元测试。
CDH使用问题记录
如何制作CDH Agent 虚拟机模板
- 问题描述:CDH Manager安装配置好一台Agent机器A(VM虚拟机)后,如果以A复制出B,在集群中B与A会冲突,每次Host Inspector只能检测到一个
- 问题定位:判断为SCM库中HOSTS表的HOST_IDENTIFIER字段冲突导致
- 解决思路:ClouderaManager是根据什么自动生成HOST_IDENTIFIER的? 如何复制VM虚拟机才能不冲突?
- 问题解决:由于在复制cm-5.4.7到agent之前启动了cloudera-scm-agent,在/opt/cm-5.4.7/lib/cloudera-scm-agent中生成response.avro和uuid两个文件,cloudera的HOST_IDENTIFIER读取的就是uuid文件的文本,停止agent>删除response.avro和uuid>启动agent,问题解决
Cloudera Manager无法删除某项服务
删除依赖关系或在命令中查看正在执行的(卡死)的命令,中止即可
Key-Value Store Indexer服务总是异常终止
- 问题描述:重新构建的Solr Collection和Index,数据写入少量没问题,程序批量写入时(>250条)服务就自动终止
- 问题定位:Java OOM虚拟机内存溢出问题
- 解决方式:hbase-indexer github-issues:Lily Hbase Indexers always auto exit,
通过向hbase-indexer官方github提交issue寻求帮助,确认是OOM问题!- 运行
hbase-indexer server
在单个hbase-server服务器调试运行(不在cloudera管理下运行),不会发生OOM - CM集中修改参数Lily HBase Indexer的Java堆栈大小,默认设置的是131M,改为1GB后重新启动服务,往Hbase写入数据时,SOlr索引生成正常,Hbase-Indexer未自动退出。
- 运行
其他参考资料:LocalMorphlineResultToSolrMapper源码
创建 Hive Metastore 数据库表失败
问题日志:
1 | ++ exec /opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/bin/hadoop jar /opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hive/lib/hive-cli-1.1.0-cdh5.4.7.jar org.apache.hive.beeline.HiveSchemaTool -verbose -dbType mysql -initSchema |
CDH5使用端口
Hbase运行中止问题
- 错误日志
1 | //cat /var/log/hbase/hbase-cmf-hbase-REGIONSERVER-slave3.lt.com.log.out |
1 | Unable to reconnect to ZooKeeper service, session 0x1508e4d86eb8047 has expired, closing socket connection |
1 | Client session timed out, have not heard from server in 40003ms for sessionid 0x1508e4d86eb88ef, closing socket connection and attempting reconnect |
1 | Opening socket connection to server server1.lt.com/192.168.1.91:2181. Will not attempt to authenticate using SASL (unknown error) |
- 参数说明
hbase参数
1 | hbase.regionserver.lease.period |
zookeeper参数1
2
3
4zookeeper.session.timeout
默认值:60000
说明:ZooKeeper 服务器允许客户端协商的最大会话超时时间(以毫秒为单位)
调优:zookeeper的超时时间不要设置太大,在服务挂掉的情况下,会反映很慢。
- 解决方式
在CM的Hbase配置hbase.regionserver.lease.period默认值改为4(分钟)
在CM的Hbase配置hbase.rpc.timeout默认值改为5(分钟)
Hbase数据操作失败
问题描述:connection to slave3.lt.com/192.168.1.103:60020 from geosmart: closing ipc connection to slave3.lt.com/192.168.1.103:60020: Connection refused: no further information
java.net.ConnectException: Connection refused: no further information
Hive UDTF问题
问题日志:Error while compliling statement:Failed IndexOutOfBoundException Index.1 Size.1
解决方案:
init初始化中的ArrayList
Hive UDTF code 2问题
问题日志:Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
解决方案:/var/log/hive中查看错误日志定位错误
HUE新建HDFS目录
问题描述: you are a Hue admin but not a HDFS superuser, “hdfs” or part of HDFS supergroup, “supergroup”
解决方案:在hue中新增hdfs用户,以hdfs用户登录创建目录和上传文件
Hive Metastore canary 创建数据库失败
问题描述: Hive Metastore canary 创建数据库失败
日志:
1 | Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the "BONECP" plugin to create a ConnectionPool gave an error : |
问题定位:读取hive数据时报找不到mysql驱动
问题解决:
* 尝试1
/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hive/lib
cp /opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/sqoop/lib/mysql-connector-java-5.1.36-bin.jar /opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hive/lib
* 尝试2
在/etc/hive/conf.cloudera.hive/hive-env.sh
中发现一句$(find /usr/share/java/mysql-connector-java.jar
于是将驱动拷贝到指定目录解决问题cp /mnt/mysql-connector-java-5.1.36-bin.jar /usr/share/java/mysql-connector-java.jar
cp /mnt/mysql-connector-java-5.1.36-bin.jar /opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop
解决问题
2)hive数据库初始化问题
问题日志:
1 | Query for candidates of org.apache.hadoop.hive.metastore.model.MVersionTable and subclasses resulted in no possible candidates |
解决参考:Reinstalling-Hive-Metastore-Database
在cm中删除oozie、hue和hive服务,重建数据库
1 | # mysql -uroot -proot |
重新添加hive服务
配置数据库192.168.1.1(server)/hive(db)/root(user)/root(psd)