首页 文章 精选 留言 我的

精选列表

搜索[自部署],共10008篇文章
优秀的个人博客,低调大师

Hadoop3单机部署,实现最简伪集群

1.节点说明 ip hostname 说明 10.0.0.120 hadoop-all 主节点+数据节点 2.环境准备 需要JDK1.8运行环境,搭建请参考[Jdk安装(Linux,MacOS,Windows)] 3.设置主机名 sh 复制代码 # 主节点 hostnamectl set-hostname hadoop-all 4.设置host sh 复制代码 # 所有节点配置 echo "10.0.0.120 hadoop-all" >> /etc/hosts 5.设置ssh免密码登录(主节点) sh 复制代码 # 设置主节点自身ssh免密码登录以及主节点对各个数据节点ssh免密码登录 # 以下操作在主节点进行 # 生成公钥 ssh-keygen -t rsa # 向主节点(本机)复制公钥 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 验证,输入yes,如果此时没有要求输入密码则配置成功 ssh hadoop-all 6.开放端口 sh 复制代码 # 主节点 firewall-cmd --add-port=9870/tcp && firewall-cmd --add-port=9870/tcp --permanent firewall-cmd --add-port=8088/tcp && firewall-cmd --add-port=8088/tcp --permanent firewall-cmd --add-port=9000/tcp && firewall-cmd --add-port=9000/tcp --permanent firewall-cmd --add-port=50090/tcp && firewall-cmd --add-port=50090/tcp --permanent # 或者关闭关闭防火墙 systemctl stop firewalld.service && systemctl disable firewalld.service 7.准备hadoop安装包 sh 复制代码 # 下载地址 http://hadoop.apache.org/ # 镜像地址 https://mirrors.cloud.tencent.com/apache/hadoop/common/ # 下载hadoop-3.3.6.tar.gz并解压到指定目录,如/data0/hadoop/hadoop-3.3.6 mkdir -p /data0/hadoop/ tar -zxvf hadoop-3.3.6.tar.gz # 创建hadoop数据存放目录 mkdir -p /data1/hadoop/repo 8.修改配置 8.1.进入配置文件目录 sh 复制代码 cd /data0/hadoop/hadoop-3.3.6/etc/hadoop 8.2.修改hadoop-env.sh配置文件 sh 复制代码 # 编辑文件 vi hadoop-env.sh # 添加 export JAVA_HOME=/data0/java/jdk1.8.0_361 export HADOOP_LOG_DIR=/data1/hadoop/repo/logs/hadoop # /data0/java/jdk1.8.0_291为jdk安装目录 # /data1/hadoop/repo为hadoop数据存放目录 8.3.修改core-site.xml配置文件 sh 复制代码 # 编辑文件 vi core-site.xml # 修改configuration节点配置 <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop-all:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data1/hadoop/repo</value> </property> </configuration> # hadoop-all为主节点主机名 # 9000为端口 8.4.修改hdfs-site.xml配置文件 sh 复制代码 # 编辑文件 vi hdfs-site.xml # 修改configuration节点配置 <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> # 1为数据副本个数 8.5.修改mapred-site.xml配置文件 sh 复制代码 # 编辑文件 vi mapred-site.xml # 修改configuration节点配置 <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> 8.6.修改yarn-site.xml配置文件 sh 复制代码 # 编辑文件 vi yarn-site.xml # 修改configuration节点配置 <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> </configuration> 9.修改hadoop启动/停止配置 9.1.进入启动脚本目录 sh 复制代码 cd /data0/hadoop/hadoop-3.3.6/sbin 9.2.修改dfs.sh的启动/停止命令 sh 复制代码 # 编辑文件 vi start-dfs.sh vi stop-dfs.sh # 都添加 HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root 9.3.修改yarn.sh的启动/停止命令 sh 复制代码 # 编辑文件 vi start-yarn.sh vi stop-yarn.sh # 都添加 YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root 10.格式化hdfs sh 复制代码 # 进入hadoop根目录 cd /data0/hadoop/hadoop-3.3.6 # 格式化 bin/hdfs namenode -format 11.启动/停止 sh 复制代码 # 进入hadoop根目录 cd /data0/hadoop/hadoop-3.3.6/sbin # 启动 ./start-all.sh # 停止 ./stop-all.sh # 查看启动状态 jps # 主节点启动[ResourceManager,NameNode,SecondaryNameNode,DataNode,NodeManager] 12.web查看状态 sh 复制代码 # 浏览器访问 10.0.0.120:9870 10.0.0.10:8088 13.配置环境变量 sh 复制代码 # 打开文件 vi ~/.bash_profile # 添加环境变量 # HADOOP export HADOOP_HOME=/data0/hadoop/hadoop-3.3.6 export PATH=$HADOOP_HOME/bin:$PATH #保存退出 :x # 让配置马上生效 source ~/.bash_profile

优秀的个人博客,低调大师

在 Cloudflare Worker 上免费部署自托管 AI 网关:集中管理与供应 Token

如果你跟我一样,平时折腾独立产品、或者是 AI 方向的 OPC,相信你一定买了很多 Coding Plan、Token Plan 等各种 AI 资源。不论你是在各种客户端中使用,还是自己开发产品提供 AI 服务,都需要接入这些资源。由于那么多供应商都提供了单独的 BaseUrl 和 ApiKey 接入,本身管理这些信息就很麻烦,在接入方还要根据不同的需要配置不同的供应商,日常调度切换也是非常头疼。

优秀的个人博客,低调大师

@Compenent,@Autowired,@PostConstruct自实现

本来是想为安卓开发一套可以依赖注入的标签,但是发现安卓很难找到选定包内的java或者class文件。所以只能当做学习参考了,全套代码如下package com.guanjian.annotion; import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target; /** Created by Administrator on 2018-06-11.*/ @Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface Autowired {}package com.guanjian.annotion; import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target; /** Created by Administrator on 2018-06-11.*/ @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface Component {}package com.guanjian.annotion; import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target; /** Created by Administrator on 2018-06-11.*/ @Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface PostConstruct {}package com.guanjian.util; import com.guanjian.utils.StringUtil;import org.slf4j.Logger;import org.slf4j.LoggerFactory; import java.io.File;import java.io.FileFilter;import java.io.IOException;import java.net.JarURLConnection;import java.net.URL;import java.util.Enumeration;import java.util.HashSet;import java.util.Set;import java.util.jar.JarEntry;import java.util.jar.JarFile; /** 类操作工具类 Created by Administrator on 2018-06-11.*/ public final class ClassUtil { private static final Logger LOGGER = LoggerFactory.getLogger(ClassUtil.class); /** * 获取类加载器 * @return */ public static ClassLoader getClassLoader() { return Thread.currentThread().getContextClassLoader(); } /** * 加载类 * @param className * @param isInitialized * @return */ public static Class<?> loadClass(String className,boolean isInitialized) { Class<?> cls; try { cls = Class.forName(className,isInitialized,getClassLoader()); } catch (ClassNotFoundException e) { LOGGER.error("load class failure",e); throw new RuntimeException(e); } return cls; } /** * 获取制定包名下的所有类 * @param packageName * @return */ public static Set<Class<?>> getClassSet(String packageName) { Set<Class<?>> classSet = new HashSet<Class<?>>(); try { Enumeration<URL> urls = getClassLoader().getResources(packageName.replace(".","/")); while (urls.hasMoreElements()) { URL url = urls.nextElement(); if (url != null) { String protocol = url.getProtocol(); if (protocol.equals("file")) { String packagePath = url.getPath().replaceAll("%20"," "); addClass(classSet,packagePath,packageName); }else if (protocol.equals("jar")) { JarURLConnection jarURLConnection = (JarURLConnection)url.openConnection(); if (jarURLConnection != null) { JarFile jarFile = jarURLConnection.getJarFile(); if (jarFile != null) { Enumeration<JarEntry> jarEntries = jarFile.entries(); while (jarEntries.hasMoreElements()) { JarEntry jarEntry = jarEntries.nextElement(); String jarEntryName = jarEntry.getName(); if (jarEntryName.endsWith(".class")) { String className = jarEntryName.substring(0,jarEntryName.lastIndexOf(".")).replaceAll("/","."); doAddClass(classSet,className); } } } } } } } } catch (Exception e) { LOGGER.error("get class set failure",e); throw new RuntimeException(e); } return classSet; } private static void addClass(Set<Class<?>> classSet, String packagePath, final String packageName) { File[] files = new File(packagePath).listFiles(new FileFilter() { public boolean accept(File pathname) { return (pathname.isFile() && pathname.getName().endsWith(".class")) || pathname.isDirectory(); } }); for (File file:files) { String fileName = file.getName(); if (file.isFile()) { String className = fileName.substring(0,fileName.lastIndexOf(".")); if (StringUtil.isNotEmpty(packagePath)) { className = packageName + "." + className; } doAddClass(classSet,className); }else { String subPackagePath = fileName; if (StringUtil.isNotEmpty(packagePath)) { subPackagePath = packagePath + "/" +subPackagePath; } String subPackageName = fileName; if (StringUtil.isNotEmpty(packageName)) { subPackageName = packageName + "." +subPackageName; } addClass(classSet,subPackagePath,subPackageName); } } } private static void doAddClass(Set<Class<?>> classSet,String className) { Class<?> cls = loadClass(className,false); classSet.add(cls); } }package com.guanjian.util; import org.slf4j.Logger;import org.slf4j.LoggerFactory; import java.lang.reflect.Field; /** 反射工具类 Created by Administrator on 2018-06-11.*/ public final class ReflectionUtil { private static final Logger LOGGER = LoggerFactory.getLogger(ReflectionUtil.class); /** * 创建实例 * @param cls * @return */ public static Object newInstance(Class<?> cls) { Object instance; try { instance = cls.newInstance(); } catch (Exception e) { LOGGER.error("new instance failure",e); throw new RuntimeException(e); } return instance; } /** * 设置成员变量值 * @param obj * @param field * @param value */ public static void setField(Object obj, Field field,Object value) { try { field.setAccessible(true); field.set(obj,value); } catch (IllegalAccessException e) { LOGGER.error("set field failure",e); throw new RuntimeException(e); } } }package com.guanjian.util; import com.guanjian.annotion.Component; import java.util.HashSet;import java.util.Set; /** 类操作助手类 Created by Administrator on 2018-06-11.*/ public final class ClassHelper { /** * 定义类集合(用于存放所加载的类) * @param basePackage */ private static Set<Class<?>> CLASS_SET; /** * 扫描所有的包,获取类集合放入CLASS_SET * @param basePackage */ public static void setClassSet(String basePackage) { CLASS_SET = ClassUtil.getClassSet(basePackage); } /** * 获取应用包名下的所有类 * @return */ public static Set<Class<?>> getClassSet() { return CLASS_SET; } /** * 获取应用包名下所有Comonent类 * @return */ public static Set<Class<?>> getComponentClassSet() { Set<Class<?>> classSet = new HashSet<Class<?>>(); for (Class<?> cls:CLASS_SET) { if (cls.isAnnotationPresent(Component.class)) { classSet.add(cls); } } return classSet; } /** * 获取应用包名下所有Bean类 * @return */ public static Set<Class<?>> getBeanClassSet() { Set<Class<?>> beanClassSet = new HashSet<Class<?>>(); beanClassSet.addAll(getComponentClassSet()); return beanClassSet; } }package com.guanjian.util; import java.util.HashMap;import java.util.Map;import java.util.Set; /** Bean助手类 Created by Administrator on 2018-06-11.*/ public final class BeanHelper { /** * 定义Bean映射(用于存放Bean类与Bean实例的映射关系) */ private static final Map<Class<?>,Object> BEAN_MAP = new HashMap<Class<?>, Object>(); /** * 获取所有的映射关系 */ public static void setBeanMap() { Set<Class<?>> beanClassSet = ClassHelper.getBeanClassSet(); for (Class<?> beanClass:beanClassSet) { Object obj = ReflectionUtil.newInstance(beanClass); BEAN_MAP.put(beanClass,obj); } } /** * 获取Bean映射 * @return */ public static Map<Class<?>,Object> getBeanMap() { return BEAN_MAP; } /** * 获取Bean实例 * @param cls * @param <T> * @return */ public static <T> T getBean(Class<T> cls) { if (!BEAN_MAP.containsKey(cls)) { throw new RuntimeException("Can not get bean by class:" + cls); } return (T)BEAN_MAP.get(cls); } }package com.guanjian.util; import com.guanjian.annotion.Autowired;import com.guanjian.annotion.PostConstruct;import com.guanjian.utils.ArrayUtil;import com.guanjian.utils.CollectionUtil; import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Map; /** Created by Administrator on 2018-06-11.*/ public final class IocHelper { public static void ioc(){ //获取所有的Bean类与Bean实例之间的映射关系 Map<Class<?>,Object> beanMap = BeanHelper.getBeanMap(); if (CollectionUtil.isNotEmpty(beanMap)) { //遍历Bean Map for (Map.Entry<Class<?>,Object> beanEntry:beanMap.entrySet()) { //从BeanMap中获取Bean类与Bean实例 Class<?> beanClass = beanEntry.getKey(); Object beanInstance = beanEntry.getValue(); //获取Bean类定义的所有成员变量 Field[] beanFields = beanClass.getDeclaredFields(); if (ArrayUtil.isNotEmpty(beanFields)) { //遍历Bean Field for (Field beanField:beanFields) { //判断当前Bean Field是否带有Autowired注解 if (beanField.isAnnotationPresent(Autowired.class)) { //在Bean Map中获取Bean Field对应的实例 Class<?> beanFieldClass = beanField.getType(); Object beanFieldInstance = beanMap.get(beanFieldClass); if (beanFieldInstance != null) { //通过反射初始化BeanField的值 ReflectionUtil.setField(beanInstance,beanField,beanFieldInstance); } } } } Method[] beanMethods = beanClass.getMethods(); if (ArrayUtil.isNotEmpty(beanMethods)) { //遍历method for (Method method:beanMethods) { //判断当前注解是否有PostConstruct注解 if (method.isAnnotationPresent(PostConstruct.class)) { try { //执行该方法 method.invoke(beanInstance,null); } catch (Exception e) { e.printStackTrace(); } } } } } } } }package com.guanjian.manage; import com.guanjian.util.BeanHelper;import com.guanjian.util.ClassHelper;import com.guanjian.util.IocHelper; /** Created by Administrator on 2018-06-11.*/ public class Manager { public static Object getBean(Class<?> beanClass) { return BeanHelper.getBean(beanClass); } public static void scanAndImp(String basePackage) { ClassHelper.setClassSet(basePackage); BeanHelper.setBeanMap(); IocHelper.ioc(); } }测试代码 package com.guanjian.test.compent; import com.guanjian.annotion.Component;import com.guanjian.annotion.PostConstruct; /** Created by Administrator on 2018-06-11.*/ @Componentpublic class Test1 { private String hello; @PostConstruct public void init() { hello = "你好"; } public void show() { System.out.println(hello); } }package com.guanjian.test.compent; import com.guanjian.annotion.Autowired;import com.guanjian.annotion.Component; /** Created by Administrator on 2018-06-11.*/ @Componentpublic class Test2 { @Autowired private Test1 test1; public void show() { test1.show(); } }package com.guanjian.test; import com.guanjian.manage.Manager;import com.guanjian.test.compent.Test2; /** Created by Administrator on 2018-06-11.*/ public class Test { public static void main(String[] args) { Manager.scanAndImp("com.guanjian.test"); Test2 test2 = (Test2)Manager.getBean(Test2.class); test2.show(); } }

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册