博文

kafka -> spark -> hive

介绍从kafka消费数据然后写入hive 所有部件的安装配置 步骤非常重要 另外下面每一个环节都有环境变量需要配置,但是没有在各个步骤中列出来而是统一放在了文章最后,所以别忘了增加环节变量。 kafka kafka的安装和启动比较简单,按照官网文档 quickstart 来做即可: 1、下载 2、启动zookeeper(kafka是靠zookeeper来管理的) 如果遇到权限错误,可以sudo chown -R paul:paul kafka_2.11-2.1.0 3、启动kafka server(这样才有了broker) 4、创建topic 5、生产topic的数据 spark 这个过程还是很简单的,解压配置环境变量即可,不过后面配置好hive后会需要拷贝配置文件到conf中。 hive hive的依赖超级长,这里以一种方式完整的呈现出来, 后面有需要把Derby换成MySQL也是可以的。 hive的元存储很重要,具体内容: Hive学习之Metastore及其配置管理 因为内嵌式的,也就是使用derby的方式既无法并行开启hive,也没有找到spark使用时因对版本不一致的error,所以改用本地MySQL方式存储metastore Hadoop hive需要HDFS,所以需要先装好Hadoop,Hadoop的安装可以参考官网的 GettingStart 另外Ubuntu系统需要把/etc/hosts中的hostname地址修改为127.0.0.1 (但是在spark运行network流处理时会报IP回环错误,需要在spark-env.sh中设置SPARK_LOCAL_IP=本机固定IP) 注意,官网的步骤基本一个不漏都要做好。 包括: 1 安装ssh 2 Pseudo-Distributed Operation 3 YARN on a Single Node 上面的步骤执行完毕后,最后保证sbin/start-dfs.sh 和 sbin/start-yarn.sh已经启动起来 如果遇到权限问题,可以先创建一个组 groupadd hadoop 然后 sudo chown -R paul:hadoop hadoop-

spark的一些记录

standalone模式时的清理 参考 spark work目录的清理 简单科普一下,spark work存放的是一个spark work任务运行的依赖环境和日志输出,集群其他的节点都来这个地方拉取,spark-events存放的是运行日志,history  web就是去的这里的数据。经检查发现是work,已经201G了。 使用spark standalone模式执行任务,每提交一次任务,在每个节点work目录下都会生成一个文件夹,命名规则app-20180212191730-0249。该文件夹下是任务提交时,各节点从主节点下载的程序所需要的资源文件。  这些目录每次执行都会生成,且不会自动清理 ,执行任务过多会将内存撑爆。将历史没用的work目录下面的app目录删除: 3、解决方案 需要添加定时清理策略,只针对于standalong模式: 在spark-env.sh里面添加如下配置 export SPARK_WORKER_OPTS= " -Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.interval=1800 -Dspark.worker.cleanup.appDataTtl=3600"   注: -Dspark.worker.cleanup.enabled=true:是否开启自动清理 -Dspark.worker.cleanup.interval=1800:清理周期,每隔多长时间清理一次,单位秒 -Dspark.worker.cleanup.appDataTtl=3600:保留最近多长时间的数据 参考: https://spark.apache.org/docs/latest/spark-standalone.html

Ubuntu下载百度网盘的大文件

因为下载百度网盘的文件需要百度网盘的客户端,但是百度又没有提供Ubuntu版本的客户端,所以只能使用chrome插件来获得实际文件的下载地址,然后使用aria2c来完成下载。 step1、安装chrome插件 https://blog.csdn.net/miaoqiucheng/article/details/73701995 git clone https: //github.com/acgotaku/BaiduExporter 然后在chrome的extensions中勾选开发者模式,然后upload文件夹中的chrome/release文件夹 step2、使用aria2c来下载 aria2c --dir=保存的目录 --max-connection-per-server=16 --max-concurrent-downloads=16 --split=16 --continue=true "下载链接地址"

OpenResty 学习

参考 https://github.com/openresty/lua-nginx-module 及其 OpenResty最佳实践 ,这里面包含上面部分API的翻译 ngx.location.capture Nginx 子请求是一种非常强有力的方式,它可以发起非阻塞的内部请求访问目标 location。目标 location 可以是配置文件中其他文件目录,或  任何  其他 nginx C 模块,包括  ngx_proxy 、 ngx_fastcgi 、 ngx_memc 、 ngx_postgres 、 ngx_drizzle ,甚至 ngx_lua 自身等等 。 需要注意的是,子请求只是模拟 HTTP 接口的形式,  没有  额外的 HTTP/TCP 流量,也  没有  IPC (进程间通信) 调用。所有工作在内部高效地在 C 语言级别完成。 子请求与 HTTP 301/302 重定向指令 (通过  ngx.redirect ) 完全不同,也与内部重定向 ((通过  ngx.exec ) 完全不同。 在发起子请求前,用户程序应总是读取完整的 HTTP 请求体 (通过调用  ngx.req.read_body  或设置  lua_need_request_body 指令为 on). 发送一个 POST 子请求,可以这样做: res = ngx.location.capture( '/foo/bar' , { method = ngx.HTTP_POST, body = 'hello, world' } ) 因为 Nginx 内核限制,子请求不允许类似  @foo  命名 location。请使用标准 location,并设置  internal  指令,仅服务内部请求。 其中@用来定义一个命名location。主要用于内部重定向,不能用来处理正常的请求。其用法如下: location / { try_files $uri $uri/ @custom } location @custom { # ...do something } 再看一个例子: local res = ngx.location.capture

docker相关

docker的安装 以Ubuntu为例,官网的安装步骤链接: https://docs.docker.com/install/linux/docker-ce/ubuntu/ docker的加速 从dockerhub上pull和push太慢了,所以使用中科大的镜像来加速: https://lug.ustc.edu.cn/wiki/mirrors/help/docker 这个网站有点小意思,可以浏览看看其他部分内容 docker使用遇到的问题 permission deny Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.37/version: dial unix /var/run/docker.sock: connect: permission denied 比如运行docker version时遇到上面问题。 解决方法:sudo chmod o+wr /var/run/docker.sock 遗留问题:下次开机还是需要执行下chmod 所以推荐另一种解决方法,也就是在官网中提到的: https://docs.docker.com/install/linux/linux-postinstall/ 通过用户组的创建和添加来搞定。 docker run时错误造成容器没有创建出来 此时查错误原因不要在run里面用-d参数,而是用-i 比如 docker run --rm -i -t -p 8085:8085 REPOSITORY-image-name:TAG https://serverfault.com/questions/596994/how-can-i-debug-a-docker-container-initialization docker删除<none>镜像 直接用 docker rmi IMAGE-ID即可 其他常用命令 docker build docker run

redis相关

安装完redis后发现开机启动,而且无法用shutdown命令关闭。其实是这样的 如果是用 apt-get 或者 yum install 安装的redis,可以直接通过下面的命令停止/启动/重启redis /etc/ init . d / redis - server stop / etc / init . d / redis - server start / etc / init . d / redis - server restart 如果是通过源码安装的redis,则可以通过redis的客户端程序 redis-cli 的 shutdown 命令来重启redis redis - cli - h 127.0 . 0.1 - p 6379 shutdown 如果上述方式都没有成功停止redis,则可以使用终极武器  kill -9 也就是说,我用apt-get的方式安装,就需要用第一个来关闭服务。 redis的一些key的命名规则 https://redis.io/topics/data-types-intro For instance "object-type:id" is a good idea, as in "user:1000". Dots or dashes are often used for multi-word fields, as in "comment:1234:reply.to" or "comment:1234:reply-to". 设置超时时间 为了防止redis使用过程中,key越来越多,导致内存在某一天爆掉。所以需要设置下超时时间。对于普通的string类型的set有超时的时长参数,但是其他诸如mset,hset和hmset是没有的。此时为了更好的维持redis的可用性,需要使用expire额外设置key的超时时长。 ➜  XXX git:(XXX) redis-cli  Could not connect to Redis at 127.0.0.1:6379: Connection refused not connected> help SET   SET key va

Git的一些记录

之前使用的Git方式太low了,下面记录一些实际使用过程中认识到的一些内容: git revert和git reset 如果提交了一个commit后想撤回这次提交那么可以用这两个方法: git revert是重新产生一个commit,而这次commit的内容是对之前commit的反向修改。 git reset是撤销之前的commit,不会在git的历史中产生任何痕迹。其中reset还分为soft、mixed和hard:soft是指保留所有的修改;mixed是指在working copy中保留修改,但是stage中不保留添加;hard是指丢弃所有的修改。一般来说用mixed就可以了。 另外在GitKraken中使用reset时是在要reset的前一次提交上右键reset git pull 和git pull --rebase 简单来说,git pull会产生merge的一个菱形痕迹,而rebase则是取消了菱形中的一个点——也就是之前产生分支时的base节点,rebase到merge后的那个点上。 详细参见: 简单对比git pull和git pull --rebase 另外和git merge --no-ff的对比: Git洁癖者使用git pull --rebase和git merge --no-ff