Spark其实是Hadoop生态圈的一部分,需要用到Hadoop的HDFS、YARN等组件。

为了方便我们的使用,Spark官方已经为我们将Hadoop与scala组件集成到spark里的安装包,解压开箱即可使用,给我们提供了很大的方便。

如果我们只是本地学习的spark,又不想搭建复杂的hadoop集群,就可以使用该安装包。

  1.  
  2. spark-3.2.0-bin-hadoop3.2-scala2.13.tgz

但是,如果是生产环境,想要搭建集群,或者后面想要自定义一些hadoop配置,就可以单独搭建Hadoop集群,后面再与spark进行整合。(推荐)

下面讲一下Hadoop集群环境的搭建。

三台服务器,需要提前做好初始化,配置好主机名、免密登录与JDK配置等等。

参考前面一篇文章:Spark集群环境搭建——服务器环境初始化

https://www.cnblogs.com/doublexi/p/15623436.html

搭建Hadoop集群

1、下载:

Hadoop官网地址:http://hadoop.apache.org/

下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.2.2/

  1. cd /data/apps/shell/software
  2. wget https://archive.apache.org/dist/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz

2、解压安装Hadoop

解压:

  1. tar xf hadoop-3.2.2.tar.gz
  2. mv hadoop-3.2.2 /data/apps/

编辑环境变量:

  1. vim /etc/profile
  2. ##HADOOP_HOME
  3. export HADOOP_HOME=/data/apps/hadoop-3.2.2/
  4. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source生效:

  1. source /etc/profile

测试:

  1. # hadoop version
  2. Hadoop 3.2.2
  3. Source code repository Unknown -r 7a3bc90b05f257c8ace2f76d74264906f0f7a932
  4. Compiled by hexiaoqiao on 2021-01-03T09:26Z
  5. Compiled with protoc 2.5.0
  6. From source with checksum 5a8f564f46624254b27f6a33126ff4
  7. This command was run using /data/apps/hadoop-3.2.2/share/hadoop/common/hadoop-common-3.2.2.jar

3、集群配置:

3.1、HDFS集群配置:

配置:hadoop-env.sh

将JDK路径明确配置给HDFS

  1. cd /data/apps/hadoop-3.2.2/etc/hadoop/
  2. vim hadoop-env.sh
  3. ...
  4. export JAVA_HOME=/usr/java/jdk1.8.0_162
  5.  
  6. export HDFS_NAMENODE_USER=root
  7. export HDFS_DATANODE_USER=root
  8. export HDFS_SECONDARYNAMENODE_USER=root
  9. export YARN_RESOURCEMANAGER_USER=root
  10. export YARN_NODEMANAGER_USER=root

指定NameNode节点以及数据存储目录(修改core-site.xml)

  1. vim core-site.xml
  2.  
  3. <configuration>
  4. <!-- 指定HDFSNameNode的地址 -->
  5. <property>
  6. <name>fs.defaultFS</name>
  7. <value>hdfs://dev-spark-master-206:8020</value>
  8. </property>
  9. <!-- 指定Hadoop运行时产生文件的存储目录 -->
  10. <property>
  11. <name>hadoop.tmp.dir</name>
  12. <value>/data/apps/hadoop-3.2.2/data/tmp</value>
  13. </property>
  14. </configuration>

core-site.xml的默认配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/coredefault.xml

指定secondarynamenode节点(修改hdfs-site.xml)

  1. vim hdfs-site.xml
  2.  
  3. <configuration>
  4. <!-- 指定Hadoop辅助名称节点主机配置 -->
  5. <property>
  6. <name>dfs.namenode.secondary.http-address</name>
  7. <value>dev-spark-slave-172:50090</value>
  8. </property>
  9. <!--副本数量 -->
  10. <property>
  11. <name>dfs.replication</name>
  12. <value>3</value>
  13. </property>
  14. </configuration>

官方默认配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/hdfsdefault.xml

指定datanode从节点(修改workers文件,每个节点配置信息占一行)

注意:这里hadoop2.x是用slaves文件,3.x是用workers文件

  1. vim workers
  1. dev-spark-master-206
  2. dev-spark-slave-171
  3. dev-spark-slave-172

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

3.2、MapReduce集群配置

指定MapReduce使用的jdk路径(修改mapred-env.sh)

  1. vim mapred-env.sh
  2.  
  3. export JAVA_HOME=/usr/java/jdk1.8.0_162

指定MapReduce计算框架运行Yarn资源调度框架(修改mapred-site.xml)

  1. vim mapred-site.xml
  2.  
  3. <configuration>
  4. <!-- 指定MR运行在Yarn -->
  5. <property>
  6. <name>mapreduce.framework.name</name>
  7. <value>yarn</value>
  8. </property>
  9. <!-- 指定MR环境变量 -->
  10. <property>
  11. <name>yarn.app.mapreduce.am.env</name>
  12. <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  13. </property>
  14. <property>
  15. <name>mapreduce.map.env</name>
  16. <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  17. </property>
  18. <property>
  19. <name>mapreduce.reduce.env</name>
  20. <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  21. </property>
  22. </configuration>

mapred-site.xml默认配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-mapreduce-client/hadoop-mapreduceclient-core/mapred-default.xml

3.3、Yarn集群配置

编辑yarn-env.sh,指定JDK路径

  1. vim yarn-env.sh
  2.  
  3. export JAVA_HOME=/usr/java/jdk1.8.0_162

指定ResourceMnager的master节点信息(修改yarn-site.xml)

  1. vim yarn-site.xml
  2.  
  3. <configuration>
  4.  
  5. <!-- Site specific YARN configuration properties -->
  6. <!-- 指定YARNResourceManager的地址 -->
  7. <property>
  8. <name>yarn.resourcemanager.hostname</name>
  9. <value>dev-spark-slave-172</value>
  10. </property>
  11. <!-- Reducer获取数据的方式 -->
  12. <property>
  13. <name>yarn.nodemanager.aux-services</name>
  14. <value>mapreduce_shuffle</value>
  15. </property>
  16. </configuration>

yarn-site.xml的默认配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-yarn/hadoop-yarn-common/yarndefault.xml

指定NodeManager节点(slaves文件已修改)

注意:

Hadoop安装目录所属用户和所属用户组信息,默认是501 dialout,而我们操作Hadoop集群的用户使用的是虚拟机的root用户,

所以为了避免出现信息混乱,修改Hadoop安装目录所属用户和用户组!!

  1. chown -R root:root /data/apps/hadoop-3.2.2

3.4、将Hadoop安装包发送到其他节点

  1. [root@dev-spark-master-206 ~]# cd /data/apps/
  2. # 将hadoop安装包发送到其他两台服务器相同的目录
  3. [root@dev-spark-master-206 apps]# rsync-script hadoop-3.2.2/

在其他两台服务器上,也需要重新编辑一下环境变量,并source加载

  1. # 检查三台服务器上是否有这个hadoop包,以及环境变量配置
  2. # vim /etc/profile
  3. ##HADOOP_HOME
  4. export HADOOP_HOME=/data/apps/hadoop-3.2.2/
  5. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

三台机器上都要source一下

  1. source /etc/profile

三台机器上运行hadoop命令测试:

  1. # hadoop version
  2. Hadoop 3.2.2
  3. Source code repository Unknown -r 7a3bc90b05f257c8ace2f76d74264906f0f7a932
  4. Compiled by hexiaoqiao on 2021-01-03T09:26Z
  5. Compiled with protoc 2.5.0
  6. From source with checksum 5a8f564f46624254b27f6a33126ff4
  7. This command was run using /data/apps/hadoop-3.2.2/share/hadoop/common/hadoop-common-3.2.2.jar

3.5、集群初始化:

注意:如果集群是第一次启动,需要在Namenode所在节点格式化NameNode,非第一次不用执行格式化Namenode操作!!

新版都用hdfs namenode命令,旧版用hadoop namenode

  1. # 注意,只能执行一次,后面再执行会破坏之前的集群环境
  2. hdfs namenode -format

初始化成功后,输出日志里会显示”successfully formatted”

3.6、启动集群:

方式一:手动一个个服务启动:

启动HDFS:

在master上启动NameNode

  1. [root@dev-spark-master-206 hadoop-3.2.2]# hadoop-daemon.sh start namenode
  1.  

在master和slave节点,启动DataNode

在dev-spark-master-206上启动datanode

  1. [root@dev-spark-master-206 hadoop-3.2.2]# hadoop-daemon.sh start datanode
  2. # jps查看是否有namenode和datanode的进程
  3. [root@dev-spark-master-206 hadoop-3.2.2]# jps

在dev-spark-slave-171上,启动datanode

  1. [root@dev-spark-slave-171 ~]# hadoop-daemon.sh start datanode
  2. # 查看是否有datanode的进程
  3. [root@dev-spark-slave-171 ~]# jps

在dev-spark-slave-172上,启动datanode

  1. [root@dev-spark-slave-172 ~]# hadoop-daemon.sh start datanode
  2. # 查看是否有datanode进程
  3. [root@dev-spark-slave-172 ~]# jps

Yarn集群单节点启动:

注意:NameNode和ResourceManger不是在同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。

按照我们集群的规划,我们在dev-spark-slave-172上启动resourcemanager和nodemanager

  1. [root@dev-spark-slave-172 ~]# yarn-daemon.sh start resourcemanager
  2. [root@dev-spark-slave-172 ~]# yarn-daemon.sh start nodemanager
  3. # 查看是否有 ResourceManager和 NodeManager进程
  4. [root@dev-spark-slave-172 ~]# jps

在dev-spark-slave-171上启动nodemanager

  1. [root@dev-spark-slave-171 ~]# yarn-daemon.sh start nodemanager
  2. # 查看是否有 NodeManager的进程
  3. [root@dev-spark-slave-171 ~]# jps

在dev-spark-master-206上,启动nodemanager

  1. [root@dev-spark-master-206 hadoop-3.2.2]# yarn-daemon.sh start nodemanager
  2. # jps查看是否有 NodeManager的进程
  3. [root@dev-spark-master-206 hadoop-3.2.2]# jps

方式二:集群群起

在master节点执行start-dfs.sh命令,它会启动namenode,以及去workers文件中指定的节点中,启动datanode

在dev-spark-master-206上启动hdfs

  1. # 不单个启动,集群启动
  2. start-dfs.sh

在dev-spark-slave-172上启动yarn

  1. [root@dev-spark-slave-172 ~]# start-yarn.sh

注意:NameNode和ResourceManger不是在同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。

注意:如果启动报错

  1. # start-dfs.sh
  2. Starting namenodes on [dev-spark-master-206]
  3. ERROR: Attempting to operate on hdfs namenode as root
  4. ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
  5. Starting datanodes
  6. ERROR: Attempting to operate on hdfs datanode as root
  7. ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
  8. Starting secondary namenodes [dev-spark-slave-172]
  9. ERROR: Attempting to operate on hdfs secondarynamenode as root
  10. ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:

  1. # vim sbin/start-dfs.sh
  2. # 顶部加上下面的配置
  3. #!/usr/bin/env bash
  4. HDFS_DATANODE_USER=root
  5. HADOOP_SECURE_DN_USER=hdfs
  6. HDFS_NAMENODE_USER=root
  7. HDFS_SECONDARYNAMENODE_USER=root
  8.  
  9. # vim sbin/stop-dfs.sh
  10. #!/usr/bin/env bash
  11. HDFS_DATANODE_USER=root
  12. HADOOP_SECURE_DN_USER=hdfs
  13. HDFS_NAMENODE_USER=root
  14. HDFS_SECONDARYNAMENODE_USER=root

对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:

  1. # vim sbin/start-yarn.sh
  2. #!/usr/bin/env bash
  3. YARN_RESOURCEMANAGER_USER=root
  4. HADOOP_SECURE_DN_USER=yarn
  5. YARN_NODEMANAGER_USER=root
  6.  
  7. # vim sbin/stop-yarn.sh
  8. #!/usr/bin/env bash
  9. YARN_RESOURCEMANAGER_USER=root
  10. HADOOP_SECURE_DN_USER=yarn
  11. YARN_NODEMANAGER_USER=root

发送到其他节点:

  1. rsync-script sbin/start-dfs.sh
  2. rsync-script sbin/stop-dfs.sh
  3. rsync-script sbin/start-yarn.sh
  4. rsync-script sbin/stop-yarn.sh

再启动:(再启动之前,需要使用jps查看之前残存的进程,用kill杀掉)

  1. # start-dfs.sh
  2. WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
  3. Starting namenodes on [dev-spark-master-206]
  4. Last login: Wed Sep 8 15:05:01 CST 2021 from 192.168.90.188 on pts/6
  5. Starting datanodes
  6. Last login: Wed Sep 8 15:37:52 CST 2021 on pts/5
  7. Starting secondary namenodes [dev-spark-slave-172]
  8. Last login: Wed Sep 8 15:37:54 CST 2021 on pts/5
  9. dev-spark-slave-172: WARNING: /data/apps/hadoop-3.2.2/logs does not exist. Creating.

启动yarn:

注意:NameNode和ResourceManger不是在同一台机器,不能在NameNode上启动 YARN,应该

在ResouceManager所在的机器上启动YARN。

  1. # 在dev-spark-slave-172上面启动yarn
  2. start-yarn.sh

3.7、Hadoop集群启动停止命令汇总
1. 各个服务组件逐一启动/停止
(1)分别启动/停止HDFS组件

  1. hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode

(2)启动/停止YARN

  1. yarn-daemon.sh start / stop resourcemanager / nodemanager

2. 各个模块分开启动/停止(配置ssh是前提)常用
(1)整体启动/停止HDFS

  1. start-dfs.sh / stop-dfs.sh

(2)整体启动/停止YARN

  1. start-yarn.sh / stop-yarn.sh

3.8、web ui界面查看

web页面查看:http://192.168.90.206:9870/

查看yarn:(注意地址是:192.168.90.172)

http://192.168.90.172:8088/

3.9、测试hdfs:

  1. [root@dev-spark-master-206 ~]# hdfs dfs -mkdir -p /test/input
  2. [root@dev-spark-master-206 ~]# echo "test hdfs" >> test.txt
  3. [root@dev-spark-master-206 ~]# hdfs dfs -put test.txt /test/input
  4. [root@dev-spark-master-206 ~]# hdfs dfs -ls /test/input
  5. Found 1 items
  6. -rw-r--r-- 3 root supergroup 10 2021-09-08 16:53 /test/input/test.txt

web界面上有看到相关文件:

4、配置历史服务器

在Yarn中运行的任务产生的日志数据不能查看,为了查看程序的历史运行情况,需要配置一下历史日志

服务器。具体配置步骤如下:

4.1. 配置mapred-site.xml

  1. # cd /data/apps/hadoop-3.2.2/etc/hadoop/
  2. # vi mapred-site.xml
  3.  
  4. <!-- 历史服务器端地址 -->
  5. <property>
  6. <name>mapreduce.jobhistory.address</name>
  7. <value>dev-spark-master-206:10020</value>
  8. </property>
  9. <!-- 历史服务器web端地址 -->
  10. <property>
  11. <name>mapreduce.jobhistory.webapp.address</name>
  12. <value>dev-spark-master-206:19888</value>
  13. </property>

4.2、配置日志的聚集

日志聚集:应用(Job)运行完成以后,将应用运行日志信息从各个task汇总上传到HDFS系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和 HistoryManager。

开启日志聚集功能具体步骤如下:

配置yarn-site.xml

  1. vim yarn-site.xml
  2.  
  3. <!-- 日志聚集功能使能 -->
  4. <property>
  5. <name>yarn.log-aggregation-enable</name>
  6. <value>true</value>
  7. </property>
  8. <!-- 日志保留时间设置7 -->
  9. <property>
  10. <name>yarn.log-aggregation.retain-seconds</name>
  11. <value>604800</value>
  12. </property>
  13. <property>
  14. <name>yarn.log.server.url</name>
  15. <value>http://dev-spark-master-206:19888/jobhistory/logs</value>
  16. </property>

4.3、分发配置到其他节点:

  1. rsync-script mapred-site.xml
  2. rsync-script yarn-site.xml

4.4、启动history server

  1. # 重启yarn
  2. [root@dev-spark-slave-172 logs]# stop-yarn.sh
  3. [root@dev-spark-slave-172 logs]# start-yarn.sh
  4.  
  5. # 启动历史服务器:
  6. [root@dev-spark-master-206 hadoop]# mapred --daemon start historyserver

4.5、web页面查看:

查看地址:http://192.168.90.206:19888/jobhistory

5、测试wordcount

创建wc.txt文件

  1. # vim wc.txt
  2. hadoop mapreduce yarn
  3. hdfs hadoop mapreduce
  4. mapreduce yarn hello
  5. hello
  6. hello

上传到hdfs:/text/input目录

  1. # 如果目录不存在,需要先创建
  2. hdfs dfs -mkdir -p /test/input
  3. # 上传
  4. hdfs dfs -put wc.txt /test/input
  5. # 查看是否上传成功
  6. hdfs dfs -ls /test/input

执行WordCount程序

  1. hadoop jar /data/apps/hadoop-3.2.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount /test/input/wc.txt /wcoutput

运行成功,查看结果:

  1. [root@dev-spark-master-206 hadoop]# hdfs dfs -ls /wcoutput
  2. Found 2 items
  3. -rw-r--r-- 3 root supergroup 0 2021-09-08 17:20 /wcoutput/_SUCCESS
  4. -rw-r--r-- 3 root supergroup 43 2021-09-08 17:20 /wcoutput/part-r-00000
  5. [root@dev-spark-master-206 hadoop]# hdfs dfs -ls /wcoutput/part-r-00000
  6. -rw-r--r-- 3 root supergroup 43 2021-09-08 17:20 /wcoutput/part-r-00000
  7. [root@dev-spark-master-206 hadoop]# hdfs dfs -cat /wcoutput/part-r-00000
  8. hadoop 2
  9. hdfs 1
  10. hello 3
  11. mapreduce 3
  12. yarn 2

web页面查看历史服务器:http://192.168.90.206:19888/jobhistory

点击logs可以查看详情:

日志详情如下:

Spark集群环境搭建——Hadoop集群环境搭建的更多相关文章

  1. Linux环境下Hadoop集群搭建

    Linux环境下Hadoop集群搭建 前言: 最近来到了武汉大学,在这里开始了我的研究生生涯.昨天通过学长们的耐心培训,了解了Hadoop,Hdfs,Hive,Hbase,MangoDB等等相关的知识 ...

  2. 环境搭建-Hadoop集群搭建

    环境搭建-Hadoop集群搭建 写在前面,前面我们快速搭建好了centos的集群环境,接下来,我们就来开始hadoop的集群的搭建工作 实验环境 Hadoop版本:CDH 5.7.0 这里,我想说一下 ...

  3. 在搭建Hadoop集群环境时遇到的一些问题

    最近在学习搭建hadoop集群环境,在搭建的过程中遇到很多问题,在这里做一些记录.1. SSH相关的问题 问题一: ssh: connect to host localhost port 22: Co ...

  4. 使用Docker搭建Hadoop集群(伪分布式与完全分布式)

    之前用虚拟机搭建Hadoop集群(包括伪分布式和完全分布式:Hadoop之伪分布式安装),但是这样太消耗资源了,自学了Docker也来操练一把,用Docker来构建Hadoop集群,这里搭建的Hado ...

  5. virtualbox 虚拟3台虚拟机搭建hadoop集群

    用了这么久的hadoop,只会使用streaming接口跑任务,各种调优还不熟练,自定义inputformat , outputformat, partitioner 还不会写,于是干脆从头开始,自己 ...

  6. 搭建Hadoop集群 (三)

    通过 搭建Hadoop集群 (二), 我们已经可以顺利运行自带的wordcount程序. 下面学习如何创建自己的Java应用, 放到Hadoop集群上运行, 并且可以通过debug来调试. 有多少种D ...

  7. 搭建Hadoop集群 (一)

    上面讲了如何搭建Hadoop的Standalone和Pseudo-Distributed Mode(搭建单节点Hadoop应用环境), 现在我们来搭建一个Fully-Distributed Mode的 ...

  8. 搭建Hadoop集群 (二)

    前面的步骤请看  搭建Hadoop集群 (一) 安装Hadoop 解压安装 登录master, 下载解压hadoop 2.6.2压缩包到/home/hm/文件夹. (也可以从主机拖拽或者psftp压缩 ...

  9. Linux下搭建Hadoop集群

    本文地址: 1.前言 本文描述的是如何使用3台Hadoop节点搭建一个集群.本文中,使用的是三个Ubuntu虚拟机,并没有使用三台物理机.在使用物理机搭建Hadoop集群的时候,也可以参考本文.首先这 ...

随机推荐

  1. Linux环境下安装中山大学东校区iNode客户端

    在中山大学登录校园网有两种方式,一种是连接WiFi,另一种是连接网线.这两种上网方式都需要用到NetID,但是连接网线的话还需要使用到iNode客户端(指东校区). Windows下iNode客户端的 ...

  2. 🔥完美解决ESlint+Prettier各项配置冲突的语法报错问题(新手向)

    本文重点: 1.解决修改了Prettier默认配置,项目内格式化无法生效 2.解决Prettier缺少配置,函数名和括号之间,自动添加空格 3.settings.json配置项分享 一个程序员,可能非 ...

  3. Fiddler抓包工具简介:(三)手机端代理配置

    1.接入网络:需要在移动终端(手机或pad)上指定代理服务器为Fiddler所在主机的IP,端口默认为8888,要保证手机和安装有fiddler的电脑处在同一局域网内,手机能ping通电脑. [方法] ...

  4. JMeter学习笔记--关联

    1.什么是关联? 本次请求需要的数据,需要上一步的请求返回给提供的过程. 2.JMeter关联中常用的两种方式 正则表达式提取器 正则表达式提取器用于对页面任何文本的提取,提取的内容是根据正则表达式在 ...

  5. Kali-Linux 2020如何设置中文

    话不多说,直接上步骤 首先,想要修改系统默认语言普通用户是办不到的,这个时候就需要切换为root用户在终端输入 sudo su(切换用户指令,后面不加用户名就默认切换为root) 输入管理员密码后就像 ...

  6. String你会用吗?

    1. 如果不是在循环体中进行字符串拼接的话,直接使用 String 的 "+" 就好了. 2. 单线程循环中操作大量字符串数据 → StringBuilder.append() 3 ...

  7. 使用Adobe Acrobat进行Word转PDF遇到的问题及解决方法

    软件版本:Adobe Acrobat 9 Pro 使用场景:Word转PDF 问题1: 我以为先要在Adobe Acrobat 9 Pro中打开Word文件,然后在执行类似转换/导出操作.但是始终无法 ...

  8. Part 30 AngularJS routeparams example

    Here is what we want to do : When we navigate to /students, the list of student names must be displa ...

  9. python接口之request测试:以json格式发送post请求,.json方法,查看响应结果的情况

    json和dict python中的dict类型要转换为json格式的数据需要用到json库: import json <json> = json.dumps(<dict>) ...

  10. tomcat的log日志乱码解决方案

    Intellij idea Tomcat输出log中文乱码 配置tomcat在VM options添加-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8 重启后控 ...